2017-02-07 2 views
0

간단한 컨트롤러를 만들려고합니다. 여기에 제 Generic.xaml이 있습니다.사용자 지정 컨트롤에서 이벤트를 처리하는 방법

<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> 

는이 내가 The name MainButton does not exist in current context 오류를 얻고있다

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"); 
    } 
} 

뒤에 내 코드입니다. 또한 Drop = "myDrop"을 설정하려고 시도했지만 작동하지 않았습니다.

구성 요소의 이벤트를 어떻게들을 수 있습니까?

답변

0

버튼은 x:Name 속성에 이름을 할당 된 클릭 이벤트 핸들러를 연결하십시오. 이 작업은 Custom Control 클래스의 OnApplyTemplate을 재정 의하여 수행합니다. http://blog.magnusmontin.net/2013/03/16/how-to-create-a-custom-window-in-wpf/

:

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

이 예를 들어 (그러나 반드시)와 같은 완전한 튜토리얼을 따라 템플릿에서 버튼을 검색

0

문제는 'Drop'값으로 설정 한 것이 아니기 때문에 사용할 수없는 MainButton에 대한 참조입니다.

UserControl으로 정의 된 사용자 지정 컨트롤을 만들려고하고 있는데 ResourceDictionary의 일부가 아닌 것 같습니다. 몇 년 동안 WPF로 작업하지 않았기 때문에 잘못되었을 수도 있습니다.

<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> 

는 또한이 튜토리얼을 체크 아웃 : 여기에 사용자 정의 컨트롤을 만드는 방법입니다 https://www.tutorialspoint.com/wpf/wpf_custom_controls.htm

우리가 코드에서 찾을 수있을 때까지
관련 문제