Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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
C# 如何将一个WPF控件动态更改为另一个?_C#_.net_Wpf - Fatal编程技术网

C# 如何将一个WPF控件动态更改为另一个?

C# 如何将一个WPF控件动态更改为另一个?,c#,.net,wpf,C#,.net,Wpf,我需要做一个组件,当某些属性改变时,复选框变成单选按钮。我不知道如何在xaml中进行这种更改。该复选框位于datatemplate中,如下所示。现在我只需要一些逻辑,把它变成一个单选按钮 <DataTemplate> <CheckBox IsChecked="{Binding IsSelected.Value, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlign

我需要做一个组件,当某些属性改变时,复选框变成单选按钮。我不知道如何在xaml中进行这种更改。该复选框位于datatemplate中,如下所示。现在我只需要一些逻辑,把它变成一个单选按钮

<DataTemplate>
    <CheckBox IsChecked="{Binding IsSelected.Value, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</DataTemplate>

您可以将
复选框
单选按钮
放在
数据模板
中的一个容器中(
StackPanel
),然后使用
DataTrigger
根据您的条件折叠其中一个

我希望这对你有帮助。对不起,我的英语太纯正了

<DataTemplate>
    <StackPanel>
        <CheckBox Content="CheckBoxHeader">
            <CheckBox.Style>
                <Style TargetType="CheckBox">
                    <Setter Property="Visibility" Value="Visible"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Condition}" Value="True">
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </CheckBox.Style>
        </CheckBox>
        <RadioButton Content="RadioButtonHeader">
            <RadioButton.Style>
                <Style TargetType="RadioButton">
                    <Setter Property="Visibility" Value="Collapsed"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Condition}" Value="True">
                            <Setter Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </RadioButton.Style>
        </RadioButton>                        
    </StackPanel>
</DataTemplate>


特别是当存在大量实例时,考虑到性能和内存使用情况,在
数据模板中同时使用控件和更改可见性的解决方案可能并不理想。在这种情况下,DataTemplateSelector可能会执行此操作-请参见添加另一个
单选按钮,根据您的逻辑更改两个控件的
可见性
。问题似乎是DataTemplate中只能有一个控件。用
网格或
StackPanel
将它们括起来,等等。请解释你的答案,不要只放置一些代码。折叠并不可怕,可以让你设置一个动画过渡。元素被从度量和布局过程中移除,WPF的依赖属性结构也被设计为最小化大型场景图中的内存使用。你是对的,它肯定不是,我在我的几个应用程序中使用了折叠方法(项目数较少)。我只是想证明还有另一种方法。