Как мне получить доступ к внутреннему элементу ControlTemplate Window.Resources? - PullRequest
0 голосов
/ 26 января 2012

Этот вопрос задавался много раз повсеместно, но решения либо являются плохой практикой и не советуются, либо не являются общими для проблемы. Может быть, эта тема может это исправить!

У меня есть 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 (), но всегда получаю нулевое значение.

1 Ответ

2 голосов
/ 26 января 2012

Ответ на этот вопрос все еще:

  1. Не делай этого.
  2. Привязать IsEnabled к собственности.

И если вы хотите игнорировать "не делайте этого" , вам нужно использовать FindName в шаблоне, а не элемент управления.

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