2012-01-25 2 views
0

이 질문은 여러 곳에서 여러 번 제기되었지만 해결책은 나쁜 습관이고 권고되지 않았거나 문제에 일반적이지 않습니다. 어쩌면이 스레드는 그것을 고칠 수 있습니다!Window.Resources의 ControlTemplate의 내부 요소에 어떻게 액세스합니까?

나는 나의 창 내에서의 ControlTemplate을 가지고 코드 숨김에서

<Window> 
<Window.Resources> 
    <ControlTemplate x:Key="buttonControl" TargetType="{x:Type Control}"> 
     <Grid Name="grdButtons" FlowDirection="LeftToRight" Height="35" HorizontalAlignment="Right"> 
      <Button Name="btnOk" Content="Ok" Width="75" Margin="10,10,255,0" HorizontalAlignment="Right" IsDefault="True" Click="btnOk_Click" /> 
      <Button Name="btnCancel" Content="Cancel" Width="75" HorizontalAlignment="Right" Margin="10,10,175,0" IsCancel="True" Click="btnCancel_Click"/> 
      <Button Name="btnApply" Content="Apply" Width="75" HorizontalAlignment="Right" Margin="10,10,95,0" Click="btnApply_Click" /> 
      <Button Name="btnDeleteRule" Content="Delete" Width="75" HorizontalAlignment="Right" Margin="10,10,15,0" Click="btnDeleteRule_Click" /> 
     </Grid> 
    </ControlTemplate> 
</Window.Resources>... 

는, 내가 코드에서 설정 한 일부 작업을 기반으로이 버튼을 사용하거나 사용하지 않도록해야합니다. 코드 숨김에서 btnDeleteRule 버튼에 올바르게 액세스하려면 어떻게해야합니까? FindName()을 사용했지만 항상 null을 얻으려고했습니다.

답변

2

그 대답은 여전히 ​​:

  1. 그것을하지 마십시오.
  2. 바인드 IsEnabled. 당신이 은 "하지 마"무시하려는 경우

는 그리고 당신은 템플릿이 아닌 컨트롤에 FindName을 사용해야합니다.

var button = (Button)someControl.Template.FindName("btnDeleteRule", someControl); 
+0

무슨 뜻입니까? 이 작업을 수행해야하므로 Microsoft는 어떻게 수행 할 것을 권장합니까? isEnabled를 속성에 바인딩하는 방법에 대해 자세히 설명해 주시겠습니까? – joepetrakovich

+0

@some_developer : 누가해야한다고 말합니까? 그리고 Microsoft는 그것을 어디에서 추천합니까? 바인딩의 작동 방식을 잘 모르는 경우 [개요] (http://msdn.microsoft.com/ko-kr/library/ms752347.aspx)를 참조하십시오. 여기서는 여기에 대해서는 자세히 설명하지 않겠습니다. –

관련 문제