我想在按钮内设置一个不同的内容模板,就像一个切换按钮一样,这取决于我的 ViewModel 的状态。我已经相当简化了代码,但是在每个数据模板中,按钮的内容绘制了不同的路径几何图形,以及一个文本块。
内容选择器类:
public class ContentSelector : DataTemplateSelector {
public DataTemplate TrueTemplate { get; set; }
public DataTemplate FalseTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container) {
if ((bool)item)
return TrueTemplate;
return FalseTemplate;
}
}
编辑:向按钮添加属性以设置其内容,其中“状态”是我的 ViewModel 中的布尔值,转换器只是根据我的 ViewModel 的状态返回“T”或“F”
XAML:
<DataTemplate x:Key="HeaderTemplate">
<ContentPresenter>
<ContentPresenter.Content>
<DockPanel LastChildFill="False">
<Button Content="{Binding State, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ButtonContentConverter}}" Command="{Binding ToggleCommand}">>
<Button.ContentTemplateSelector>
<ContentSelector>
<local:ContentSelector.TrueTemplate>
<DataTemplate>
<TextBlock Text="T" ... />
</DataTemplate>
</local:ContentSelector.TrueTemplate>
<local:ContentSelector.FalseTemplate>
<DataTemplate>
<TextBlock Text="F" ... />
</DataTemplate>
</local:ContentSelector.FalseTemplate>
</ContentSelector>
</Button.ContentTemplateSelector>
</Button>
</DockPanel>
</ContentPresenter.Content>
</ContentPresenter>
</DataTemplate>
我似乎无法在我的 ContentSelector 类中打断点。它在设计器中确实有效,这意味着如果我将按钮的内容更改为“T”或“F”,如果我将其更改为在 ContentSelector 类中返回相应的 DataTemplate,但是当我运行应用程序时它永远不会点击 ContentSelector,并且内容该按钮是完全空的。
关于为什么会发生这种情况的任何想法?我尝试将按钮的内容设置为我的 ViewModel 的状态,并使用转换器将其更改为布尔值,认为必须设置按钮的内容才能触发 ContentSelector,但它没有工作。