假设我有两个UserControl:uc1
和uc2
。 uc1
源自Button
,uc2
源自UserControl
。
uc1
有一个DependencyProperty
isTextShow
:
C#:
public static readonly DependencyProperty isTextShowProperty = DependencyProperty.Register(
"isTextShow",
typeof(bool),
typeof(uc1),
new PropertyMetadata(true));
public bool isTextShow
{
get { return (bool)GetValue(isTextShowProperty ); }
set { SetValue(isTextShowProperty , value); }
}
XAML:
<Button x:Class="xx.xx.uc1"
....
x:Name="ButtonBase">
<TextBlock
..
Visibility="{Binding ElementName=ButtonBase, Path=isTextShow, Converter="{StaticResource BoolToVisibilityConverter}"}">
</TextBlock>
....
</Button>
uc2
有一个DependencyProperty
isWhatEver
:
C#:
public static readonly DependencyProperty isWhatEverProperty = DependencyProperty.Register(
"isWhatEver",
typeof(bool),
typeof(uc2),
new PropertyMetadata(true));
public bool isWhatEver
{
get { return (bool)GetValue(isWhatEverProperty ); }
set { SetValue(isWhatEverProperty , value); }
}
XAML:
<UserControl x:Class="xx.xx.uc2"
....
x:Name="UCBase">
<uc1
..
isTextShow="{Binding ElementName=UCBase, Path=isWhatEver}">
</uc1>
....
现在我在以下某些地方使用uc2
:
<uc2
....
isWhatEver="False"
/>
我预测在此之后,TextBlock
中的uc1
将无法显示,但结果是仍然可见。
我在一些重要的地方做了断点,发现isWhatEver
变成了假,但isTextShow
的{{1}}仍然是真的。这个绑定似乎有问题。
此外,我更改了这一行:
uc1
到
isTextShow="{Binding ElementName=UCBase, Path=isWhatEver}"
这一次,isTextShow="False",
中的TextBlock
没有显示出来。所以这意味着第一层绑定工作正常,但第二层(UserControl的绑定DependencyProperty到UserControl的另一个DependencyProperty)不起作用。
我忽略了什么重要的事吗?谢谢。
更新:
我想现在我知道原因,但我仍然不知道解决方案。
原因是:uc1
源自uc1
;如果我将Button
更改为从uc1
派生,则可以正常使用!但是对于目前的情况,我真的需要让UserControl
成为uc1
的孩子,所以有什么想法吗?