从后面的代码访问ResourceDictionary中的按钮

时间:2014-07-02 08:03:28

标签: wpf resourcedictionary

我有一个带有文件夹主题的WPF项目,其中有一个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:ikea.Master">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Style/Master.xaml" />
    </ResourceDictionary.MergedDictionaries>

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

                        <StackPanel Margin="10" Orientation="Horizontal">
                            <Button Style="{StaticResource RoundCorner}" Name="btn1"  Command="NavigationCommands.GoToPage" CommandParameter="ViewModel/Back.xaml" CommandTarget="{Binding ElementName=frmContent}" ></Button>
                            <Button Style="{StaticResource RoundCorner}" Name="btn2" Command="NavigationCommands.GoToPage" CommandParameter="ViewModel/Home.xaml" CommandTarget="{Binding ElementName=frmContent}" ></Button>
                            <Button Style="{StaticResource RoundCorner}" Name="btn3" Command="NavigationCommands.GoToPage" CommandParameter="ViewModel/Help.xaml" CommandTarget="{Binding ElementName=frmContent}" ></Button>

            </StackPanel >

            </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

在Master.xaml文件中,我为RoundCorner定义了一种样式。

现在,我想要做的是通过Back.xaml,Home.xaml等后面的代码更改按钮的内容。这些按钮出现在我的所有页面上。如何从代码后面访问btn1,btn2,btn3?

Application.Current.Resources什么都没给我。

1 个答案:

答案 0 :(得分:0)

如果已经渲染了元素,则可以使用VisualTreeHelper类。 这里有一些粗略的方法可以为你找到按钮,如果它有帮助 - 根据你的需要重新设计它

    public static IEnumerable<Button> FindButtons(DependencyObject container, string name)
    {
        if (container == null)
        {
            yield break;
        }

        for (var i = 0; i < VisualTreeHelper.GetChildrenCount(container); i++)
        {
            var child = VisualTreeHelper.GetChild(container, i);
            var button = child as Button;

            if (button != null && button.Name == name)
            {
                yield return button;
            }

            foreach (var childOfChild in FindButtons(child, name))
            {
                yield return childOfChild;
            }
        }
    }

你应该得到一堆符合指定名称的按钮。