Установка свойства в элементе управления от дочернего в wpf - PullRequest
0 голосов
/ 03 сентября 2018

Ради простоты скажем, у меня есть этот элемент управления, называемый DetailArea

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

В другом элементе управления я использую мой DetailArea

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

CustomDataControl в элементе управления DetailArea имеет общедоступное свойство зависимости Visibility, как и все свойства элементов пользовательского интерфейса, которые я хочу установить в значение Hidden.

Как я могу сделать это с помощью элемента управления дисплеем?

Редактировать: я не могу изменить wpf или код DetailArea, так как он находится в другом, который я не контролирую.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

В соответствии с вашими ответами в комментариях, я предлагаю вам применить стиль, который влияет только на упомянутый элемент управления. Как то так

<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", потому что стиль может быть применен неправильно, подробности см. Здесь (Авторы @Jack).

0 голосов
/ 03 сентября 2018

Я не могу изменить wpf или код DetailArea, так как он находится в другом, который я не контролирую.

Тогда вы не можете установить свойство CustomDataControl с помощью XAML.

Что вам нужно сделать, это добавить свойство add dependency в класс DetailArea и связать свойство Visibility CustomDataControl с этим классом. Затем вы можете установить это свойство в Display UserControl:

<DetailArea Visibility="Collapsed" />

Если по какой-то причине вы не можете изменить DetailsArea, вам придется установить это свойство программно, например:

detailArea.MyDataControl.Visibility = Visibility.Collapsed;
...