在wpf中设置来自child的控制属性

问题描述 投票:2回答:2

为简单起见,我说这个名为DetailArea的控件

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

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

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

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

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

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

c# wpf xaml styles visibility
2个回答
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}"is可选。


编辑我删除了x:Key="MakeInvisible",因为样式可能无法正确应用,详情请参阅here(致@Jack)。


0
投票

我无法修改DetailArea wpf或代码,因为它在另一个我无法控制的地方。

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

你应该做的是将添加依赖属性添加到DetailArea类并将VisibilityCustomDataControl属性绑定到此属性。然后,您可以在Display UserControl中设置此属性:

<DetailArea Visibility="Collapsed" />

如果由于某种原因无法修改DetailsArea,则必须以编程方式设置属性,例如:

detailArea.MyDataControl.Visibility = Visibility.Collapsed;
© www.soinside.com 2019 - 2024. All rights reserved.