Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内容选择器WPF_Wpf_Xaml_Button_Contenttemplateselector - Fatal编程技术网

内容选择器WPF

内容选择器WPF,wpf,xaml,button,contenttemplateselector,Wpf,Xaml,Button,Contenttemplateselector,我想在按钮内设置一个不同的内容模板,使其类似于切换按钮,具体取决于我的ViewModel的状态。我已经对代码进行了相当多的简化,但是在每个数据模板中,按钮的内容都会绘制不同的路径几何图形以及一个文本块 ContentSelector类: public class ContentSelector : DataTemplateSelector { public DataTemplate TrueTemplate { get; set; } public DataTemplate Fa

我想在按钮内设置一个不同的内容模板,使其类似于切换按钮,具体取决于我的ViewModel的状态。我已经对代码进行了相当多的简化,但是在每个数据模板中,按钮的内容都会绘制不同的路径几何图形以及一个文本块

ContentSelector类:

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>