2017-02-07 6 views
0

Ich versuche, einen einfachen Controller zu erstellen, hier ist meine Generic.xaml;So behandeln Sie Ereignisse in benutzerdefinierten Steuerelementen

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:TopluNotEkle"> 


    <Style TargetType="{x:Type local:FileSelector}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:FileSelector}"> 

        <Button BorderThickness="8,8,8,8" Background="Gray" x:Name="MainButton"> 
         <Button.BorderBrush> 
          <DrawingBrush TileMode="Tile" Viewport="0,0,64,64" ViewportUnits="Absolute"> 
           <DrawingBrush.Drawing> 
            <DrawingGroup> 
             <GeometryDrawing Brush="LightGray"> 
              <GeometryDrawing.Geometry> 
               <RectangleGeometry Rect="0,0,100,100" /> 
              </GeometryDrawing.Geometry> 
             </GeometryDrawing> 
             <GeometryDrawing Brush="DarkGray"> 
              <GeometryDrawing.Geometry> 
               <GeometryGroup> 
                <RectangleGeometry Rect="0,0,50,50"/> 
                <RectangleGeometry Rect="50,50,50,50"/> 
               </GeometryGroup> 
              </GeometryDrawing.Geometry> 
             </GeometryDrawing> 
            </DrawingGroup> 
           </DrawingBrush.Drawing> 
          </DrawingBrush> 
         </Button.BorderBrush> 
         <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="BlueViolet" FontWeight="Bold" FontSize="20">Drag & Drop</TextBlock> 
        </Button> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

und dies ist mein Code hinter

public class FileSelector : Control 
{ 
    static FileSelector() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(FileSelector), new FrameworkPropertyMetadata(typeof(FileSelector))); 
     MainButton.Drop += myDrop; 

    } 

    static void myDrop(object sender, DragEventArgs e) 
    { 
     Debug.Fail("This is called"); 
    } 
} 

ich The name MainButton does not exist in current context Störung erhalten. Ich habe auch versucht, Drop = "myDrop" Einstellung, aber das hat auch nicht funktioniert.

Wie kann ich Ereignisse auf meiner Komponente hören?

Antwort

0

Buttons wurden einen Namen durch das x:Name Attribut zugewiesen für uns in der Lage sein, sie in Code zu finden und schließen Sie ihre Click-Event-Handler an. Dies geschieht durch Überschreiben der OnApplyTemplate in unserer Custom Control-Klasse.

Rufen Sie die Taste aus der Vorlage

public override void OnApplyTemplate() 
{ 
    Button mainButton = GetTemplateChild("MainButton") as Button; 
    if (mainButton != null) 
     mainButton.Click += MainBtnClick; 
} 

ein komplettes Tutorial Folgen wie beispielsweise (aber nicht notwendigerweise) so: http://blog.magnusmontin.net/2013/03/16/how-to-create-a-custom-window-in-wpf/

0

Also Ihr Problem ist nicht, was Sie als 'Drop' Wert einstellen, es ist die Referenz auf die MainButton, die nicht verfügbar ist.

Ich denke, Sie versuchen, ein benutzerdefiniertes Steuerelement zu erstellen, das normalerweise als UserControl definiert ist, nicht als Teil von ResourceDictionary. Ich könnte mich irren, da ich seit einigen Jahren nicht mehr mit WPF zusammengearbeitet habe. Hier ist, wie Benutzersteuerung erstellen:

<UserControl x:class= "YourNamespace.FileSelector" ... other xmlns garbage> 

<Button BorderThickness="8,8,8,8" Background="Gray" x:Name="MainButton"> 
    <Button.BorderBrush> 
     <DrawingBrush TileMode="Tile" Viewport="0,0,64,64" ViewportUnits="Absolute"> 
      <DrawingBrush.Drawing> 
       <DrawingGroup> 
        <GeometryDrawing Brush="LightGray"> 
         <GeometryDrawing.Geometry> 
          <RectangleGeometry Rect="0,0,100,100" /> 
         </GeometryDrawing.Geometry> 
        </GeometryDrawing> 
        <GeometryDrawing Brush="DarkGray"> 
         <GeometryDrawing.Geometry> 
          <GeometryGroup> 
           <RectangleGeometry Rect="0,0,50,50"/> 
           <RectangleGeometry Rect="50,50,50,50"/> 
          </GeometryGroup> 
         </GeometryDrawing.Geometry> 
        </GeometryDrawing> 
       </DrawingGroup> 
      </DrawingBrush.Drawing> 
     </DrawingBrush> 
    </Button.BorderBrush> 
    <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="BlueViolet" FontWeight="Bold" FontSize="20">Drag & Drop</TextBlock> 
</Button> 

Auch dieses Tutorial finden Sie unter: https://www.tutorialspoint.com/wpf/wpf_custom_controls.htm

Verwandte Themen