Найти элемент из внешнего ресурса стиля, а затем изменить его собственный стиль - PullRequest
0 голосов
/ 01 октября 2018

Просто из любопытства.Возьмите этот пример:

Во-первых, в своем коде позади я создаю три флажка и три эллипса:

for (int = 0; i < 3; i++){
    CheckBox checkBox = new CheckBox();
    checkBox.Style = (Style)this.FindResource("MyCheckBoxStyle");
    checkBox.Name = "checkBox_" + i;

    Path ellipsePath = new Path();
    ellipsePath.Fill = Brushes.Gray;

    EllipseGeometry ellipseGeometry = new EllipseGeometry();
    ellipseGeometry.Center = new Point(0, 0);
    ellipseGeometry.RadiusX = 2.5;
    ellipseGeometry.RadiusY = 2.5;

    ellipsePath.Data = ellipseGeometry;
    ellipsePath.Name = "ellipse_" + i;
}

Теперь из стиля CheckBox:

<Style x:Key="MyCheckBoxStyle" TargetType="{x:Type CheckBox}">
        <Setter Property="Foreground" Value="Gray"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type CheckBox}"> 
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="Background" TargetName="Border" Value="Green"/>
                            <Setter Property="BorderBrush" TargetName="Border" Value="Green"/>
                            <Setter Property="Foreground" Value="Green"/>
                <!-- Assumming the checkbox I'm checking is called "checkBox_1" I want to
                be able to find the ellipse path whose name is "ellipse_1" and change
                its style (for example, its color) -->
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Идея состоит в том, что каждый флажок связан с одним эллипсом.Как говорится в комментарии, предполагая, что флажок, который я проверяю, называется checkBox_1, я хочу иметь возможность найти элемент эллипса с именем ellipse_1 и изменить его стиль (например, его цвет).

Возможно ли это?

Редактировать

Из ваших ответов я вижу, что могу сделать это, если флажок и эллипс принадлежат одному и тому же шаблону.Проблема, которую я обнаружил (извините, я забыл упомянуть об этом) заключается в том, что в настоящее время я использую сетку, где одна из строк содержит эллипсы, а другая строка содержит флажки, которые создаются во время выполнения (именно поэтому я использовалкод позади):

enter image description here

1 Ответ

0 голосов
/ 01 октября 2018

Используйте DataTemplate, как показано ниже, в качестве ItemTemplate для ItemsControl:

<DataTemplate x:Key="itemTemplate">
    <StackPanel Orientation="Horizontal">
        <Path x:Name="path" Fill="Gray" VerticalAlignment="Center" Margin="5">
            <Path.Data>
                <EllipseGeometry RadiusX="2.5" RadiusY="2.5"/>
            </Path.Data>
        </Path>
        <CheckBox x:Name="checkBox"/>
    </StackPanel>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding ElementName=checkBox, Path=IsChecked}"
                     Value="True">
            <Setter TargetName="path" Property="Fill" Value="Green"/>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...