在WPF中从子级设置控件中的属性

时间:2018-09-03 12:18:58

标签: c# wpf xaml styles visibility

为简单起见,我有一个名为DetailArea的控件

<UserControl x:Class="DetailArea">
    <Grid>
       <CustomDataControl x:Name="MyDataControl" />
    </Grid>
</UserControl>

在另一个控件中,我使用我的DetailArea

<UserControl x:Class="Display">
    <Grid>
        <DetailArea />
    </Grid>
</UserControl>

DetailArea控件中的CustomDataControl具有公共的可视性依赖项属性,就像我希望能够设置为“隐藏”的所有UI元素属性一样。

如何从显示控件中执行此操作?

编辑:我无法修改DetailArea wpf或代码,因为它位于另一个我无法控制的位置。

2 个答案:

答案 0 :(得分:1)

根据您在评论中的答案,我建议您应用一种仅影响所提到的控件的样式。像这样

<UserControl x:Class="Display">
    <Grid>
        <Grid.Resources>
            <Style TargetType="{x:Type CustomDataControl}" BasedOn="{StaticResource KeyOfCustomDataControlStyle}">
                <Setter Property="Visibility" Value="Hidden"/>
            </Style>
        </Grid.Resources>
        <DetailArea />
    </Grid>
</UserControl>

注意:这只是一个伪代码,请对其进行修改以匹配您的环境。

注意2:BasedOn="{StaticResource KeyOfCustomDataControlStyle}"是可选的。


修改 我删除了x:Key="MakeInvisible",因为该样式可能无法正确应用,详细信息请参见here(感谢@Jack)。

答案 1 :(得分:0)

  

我无法修改DetailArea wpf或代码,因为它位于另一个我无法控制的位置。

然后您不能使用XAML设置CustomDataControl的属性。

您应该做的是将添加依赖项属性添加到DetailArea类,并将Visibility的{​​{1}}属性绑定到该类。然后,您可以在CustomDataControl Display中设置此属性:

UserControl

如果由于某种原因无法修改<DetailArea Visibility="Collapsed" /> ,则必须以编程方式设置属性,例如:

DetailsArea