内容选择器WPF
我想在按钮内设置一个不同的内容模板,使其类似于切换按钮,具体取决于我的ViewModel的状态。我已经对代码进行了相当多的简化,但是在每个数据模板中,按钮的内容都会绘制不同的路径几何图形以及一个文本块 ContentSelector类:内容选择器WPF,wpf,xaml,button,contenttemplateselector,Wpf,Xaml,Button,Contenttemplateselector,我想在按钮内设置一个不同的内容模板,使其类似于切换按钮,具体取决于我的ViewModel的状态。我已经对代码进行了相当多的简化,但是在每个数据模板中,按钮的内容都会绘制不同的路径几何图形以及一个文本块 ContentSelector类: public class ContentSelector : DataTemplateSelector { public DataTemplate TrueTemplate { get; set; } public DataTemplate Fa
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;
}
}
编辑:向按钮添加属性以设置其内容,其中“状态”是my ViewModel中的布尔值,转换器仅根据my ViewModel的状态返回“T”或“F”
XAML:
>
我似乎无法在ContentSelector类中找到断点。它确实在设计器中工作,这意味着如果我将按钮的内容更改为返回ContentSelector类中相应的DataTemplate,则按钮的内容将更改为“T”或“F”,但当我运行应用程序时,它从未命中ContentSelector,并且按钮的内容完全为空
你知道为什么会这样吗?我尝试将按钮的内容设置为ViewModel的状态,并使用转换器将其更改为布尔值,认为必须将按钮的内容设置为触发ContentSelector,但它不起作用。能否显示用于设置按钮内容的代码?根据这里的内容,ContentSelector的属性在触发事件之前根本不会设置。还有,有什么原因不能只对一个属性进行数据绑定,并在触发事件时在“t”和“F”之间切换该属性?我已经添加了将我的内容绑定到状态的属性,但请记住,这不仅仅是为内容返回“t”或“F”,这只是我在按钮上绘制的几何体路径的占位符,作为其内容,具体取决于状态。把这些都写在帖子里是很长/不相关的。我已经尝试过将内容设置为触发事件,但它仍然没有击中我的ContentSelector类
<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>