如果我有一个我想充当覆盖层的用户控件,我希望它隐藏自己,可以这么说,当不需要它时。它将通过父对象可以绑定(bind)到的依赖属性知道这一点。我的第一个想法是通过 UC 的最外面的网格来做到这一点。所以像这样:
<UserControl x:Class="MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:valueConverters="clr-namespace:Some.Namespace;assembly=Some.Assembly">
<UserControl.Resources>
<valueConverters:VisibilityConverter x:Key="VisibilityConverter"/>
</UserControl.Resources>
<Grid DataContext="{Binding RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}}"
Visibility="{Binding ShowMyself, Converter={StaticResource VisibilityConverter}}">>
.................
.................
</Grid>
</UserControl>
这很好用。现在,如果我想通过 Parent 对象隐藏控件,使用类似这样的方法就足够简单了:
<controls:MyUserControl ShowMyself="{Binding ShowUserControl">
.........
.........
</controls:MyUserControl>
但我想知道是否有可能做这样的事情,以便控件从本质上隐藏自己:
<UserControl x:Class="MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:valueConverters="clr-namespace:Some.Namespace;assembly=Some.Assembly">
<UserControl.Resources>
<valueConverters:VisibilityConverter x:Key="VisibilityConverter"/>
</UserControl.Resources>
<UserControl.Visibility>
<Binding Path="ShowMyself" Converter="{StaticResource VisibilityConverter}"/>
</UserControl.Visibility>
<Grid>
.................
.................
</Grid>
</UserControl>
我意识到在实际方面可能几乎没有区别,这可能纯粹是学术性的,但看起来更“合适”。如果我尝试第二种情况,问题就变成了 Binding 在 DataContext 之外并且看不到属性 - DataContext 现在是父对象的,这是有道理的,因为 UserControl 标签本身基本上不包含“肉”。
这是不可能的吗?
最佳答案
如果您想在 Usercontrol
级别绑定(bind)到 UserControl
的属性,请使用 RelativeSource.Self
作为绑定(bind)源
<UserControl ...>
<UserControl.Resources>
<valueConverters:VisibilityConverter x:Key="VisibilityConverter"/>
</UserControl.Resources>
<UserControl.Visibility>
<Binding
RelativeSource="{RelativeSource Self}"
Path="ShowMyself"
Converter="{StaticResource VisibilityConverter}"/>
</UserControl.Visibility>
<!-- .... -->
</UserControl>
需要按顺序执行以避免访问本地VisibilityConverter
资源时出现问题
关于c# - UserControl 可以通过自己的 XAML 隐藏自己吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24826974/