<ToggleButton Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}" Template="{Utilities:BindableResource {Binding Path=TemplateResource}}">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=SelectedTemplateResource}}" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>第一个可绑定资源在togglebutton的模板属性上为"TemplateResource“工作,但是"SelectedTemplateResource”在tiggers中不工作。此代码位于资源分析器中,其中实际资源位于主题资源集中。
我收到一个错误,对于setter值来说,xamlparseexception键为null。我已经坚持了好几个小时了,但我弄不明白为什么不管用.如果我取出样式并将第一个绑定替换为第二个资源,那么它确实会正确显示,但是样式中的绑定将无法工作。
有人知道为什么吗?
编辑--我刚刚试过了,但没有成功。
<ToggleButton Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=TemplateResource}}" />
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=SelectedTemplateResource}}" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>发布于 2012-04-12 13:27:26
在发现这在纯xaml中是不可能的之后,我拿出了c#并创建了一个自定义控件.这是非常基本的,可以改进,我将对其进行一些更改,但最终一个自定义控件解决了这个问题,这样您就可以从资源字典中点击单击事件,并动态地更改模板。
public class TabButton : Button
{
public static readonly DependencyProperty SelectedTemplateProperty =
DependencyProperty.Register("SelectedTemplate", typeof(ControlTemplate), typeof(TabButton));
public ControlTemplate SelectedTemplate
{
get { return base.GetValue(SelectedTemplateProperty) as ControlTemplate; }
set { base.SetValue(SelectedTemplateProperty, value); }
}
public TabButton()
{
this.Click += new RoutedEventHandler(TabButton_Click);
}
~TabButton()
{
}
public void TabButton_Click(object sender, RoutedEventArgs e)
{
ControlTemplate template = (ControlTemplate)this.FindResource("Environmental Template Selected");
(sender as TabButton).Template = template;
}
}干杯。
https://stackoverflow.com/questions/10112798
复制相似问题