我有一个带有文件夹主题的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什么都没给我。
答案 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;
}
}
}
你应该得到一堆符合指定名称的按钮。