C# 使用数据触发器更改边框控件的内容

C# 使用数据触发器更改边框控件的内容,c#,wpf,C#,Wpf,我有一个名为“Popup”的网格,它的可见性通过booltVisibilityConverter绑定到viewmodel中的Bool 这非常有效,但我想通过根据viewmodel中的另一个Bool设置Border控件的内容,并使用booltVisibilityConverter来为多个用户控件重新使用它 这是我到目前为止所拥有的,但显然它不起作用,而且我在网上找不到任何答案。有人有什么想法吗 <Grid x:Name="PopUp" Visibility="{Binding ShowPop

我有一个名为“Popup”的
网格,它的可见性通过
booltVisibilityConverter
绑定到viewmodel中的
Bool

这非常有效,但我想通过根据viewmodel中的另一个
Bool
设置
Border
控件的内容,并使用
booltVisibilityConverter来为多个
用户控件重新使用它

这是我到目前为止所拥有的,但显然它不起作用,而且我在网上找不到任何答案。有人有什么想法吗

<Grid x:Name="PopUp" Visibility="{Binding ShowPopUp, Converter={StaticResource BoolToVisibilityConverter}}">
        <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <Border Grid.Column="1" Grid.Row="1">
            <Border.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ShowView1}" Value="true">
                            <Setter Property="ContentControl.Content">
                                <Setter.Value>
                                    <view:View1/>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>
    </Grid>

我找到了灵感

我必须创建一个
ContentControl
,然后使用
DataTrigger
模板
设置为包含我的
UserControl
边框
,这与我之前尝试的方式非常相似

<Grid x:Name="PopUp" Visibility="{Binding ShowPopUp, Converter={StaticResource BoolToVisibilityConverter}}">
        <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <ContentControl Grid.Row="1" Grid.Column="1">
            <ContentControl.Style>
                <Style TargetType="ContentControl">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ShowView1}" Value="true">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Border>
                                            <view:View1/>
                                        </Border>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ContentControl.Style>
        </ContentControl>

    </Grid>

我找到了灵感

我必须创建一个
ContentControl
,然后使用
DataTrigger
模板
设置为包含我的
UserControl
边框
,这与我之前尝试的方式非常相似

<Grid x:Name="PopUp" Visibility="{Binding ShowPopUp, Converter={StaticResource BoolToVisibilityConverter}}">
        <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <ContentControl Grid.Row="1" Grid.Column="1">
            <ContentControl.Style>
                <Style TargetType="ContentControl">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ShowView1}" Value="true">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Border>
                                            <view:View1/>
                                        </Border>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ContentControl.Style>
        </ContentControl>

    </Grid>


Border没有ContentControl,因此您无法设置内容属性。明白,但我可以在边框中显示用户控件,因此必须有一种方法通过样式将边框的内容设置为用户控件,然后触发,对吗?请熟悉WPF在线文档。在XAML中声明边框内的元素将设置边框的子属性。好的,我知道我的方法不正确。然而,我仍然不确定如何达到我所期待的效果。你能推荐一个合适的替代方案吗?谢谢@Clemens提供关于设置边框的子属性的提示,它引导我找到了我想要的答案。边框不是ContentControl,所以你不能设置内容属性。明白,但我可以在边框中显示用户控件,因此,必须有一种方法通过样式将边框的内容设置为用户控件,然后触发,对吗?请熟悉WPF在线文档。在XAML中声明边框内的元素将设置边框的子属性。好的,我知道我的方法不正确。然而,我仍然不确定如何达到我所期待的效果。您能推荐一个合适的替代方案吗?感谢@Clemens提供有关设置边框的子属性的提示,它引导我找到了我想要的答案。请注意-还有另一种方法,请参阅以获取详细信息。如果您想在有关数据的模板之间切换,也可以使用DataTemplateSelector。谢谢!我会看一看。请注意-还有另一种方法,详情请参见。如果您想在有关数据的模板之间切换,也可以使用DataTemplateSelector。谢谢!我来看看。