如何访问Window.Resources的ControlTemplate的内部元素?

时间:2012-01-25 22:00:27

标签: wpf code-behind 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。

1 个答案:

答案 0 :(得分:2)

答案仍然是:

  1. 不要这样做。
  2. IsEnabled绑定到某个属性。
  3. 如果您想忽略“不要这样做”,您需要在模板上使用FindName,而不是控件。

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