Cambiar el valor de una Propiedad de Dependencia mediante programación

0

Pregunta

Quiero cambiar el valor de una Propiedad de Dependencia mediante programación.

Este es mi XAML:

<Window.Resources>
      <ResourceDictionary>
         <Style
            x:Key="TreeViewItemStyle"
            TargetType="TreeViewItem">    
            <Style.Triggers>
               <Trigger
                  Property="local:ColorHelper.IsColor"
                  Value="True" >
               <Setter
                  Property="Foreground"
                  Value="{Binding Color}" />
               </Trigger>
               <Trigger
                  Property="local:ColorHelper.IsColor"
                  Value="False" >
               <Setter
                  Property="Foreground"
                  Value="Black" />
               </Trigger>
            </Style.Triggers>
           </Style>
      </ResourceDictionary>
   </Window.Resources>

Quiero que este estilo para ser aplicado a un treeview

<TreeView
           HorizontalAlignment="Stretch"
           Margin="15,65,15,0"
           x:Name="treeView1"
           VerticalAlignment="Stretch"
           ItemContainerStyle="{StaticResource TreeViewItemStyle}"
           ItemTemplate="{StaticResource CheckBoxItemTemplate}"
           Grid.ColumnSpan="1"
           Grid.RowSpan="2"
           Grid.Column="1" />

Y cambiando el valor de color de la IsColor propiedad a través de una casilla de verificación:

<CheckBox
                     Name="CHK_Gray"
                     VerticalAlignment="Center"
                     Foreground="DarkGray"
                     Grid.Row="6"
                     Grid.Column="0"
                     Grid.RowSpan="1"
                     Grid.ColumnSpan="2"
                     Unchecked="grayCheckBox_Unchecked"
                     Checked="grayCheckBox_Checked">
                     Show Created Assembly (in Grey)
                  </CheckBox>

La Propiedad de Dependencia se crea como este:

 public class ColorHelper : DependencyObject
   {
      public static readonly DependencyProperty IsColorProperty = DependencyProperty.Register(
          "IsColor", typeof(bool), typeof(ColorHelper), new PropertyMetadata(false));


      public static void SetIsColor(DependencyObject target, Boolean value)
      {
         target.SetValue(IsColorProperty, value);
      }

      public static bool GetIsColor(DependencyObject target)
      {
         return (bool)target.GetValue(IsColorProperty);
      }
   }

Cómo puedo hacer en el marcado y sin marcar evento para cambiar el valor de la IsColor propiedad?

private void grayCheckBox_Checked(object sender, RoutedEventArgs e)
  {
     ???
  }
  private void grayCheckBox_Unchecked(object sender, RoutedEventArgs e)
  {
     ???
  }

Muchas gracias por su ayuda!

c# data-binding wpf
2021-11-23 18:29:39
1

Mejor respuesta

0

Usted necesita obtener una referencia al elemento de la que desea establecer la propiedad adjunta, para empezar.

Usted podría intentar este método para obtener el TreeViewItem elementos de la TreeView y, a continuación, establezca la propiedad de todos ellos si es que desea:

foreach(TreeViewItem tvi i tv.FindTreeViewItems())
    ColorHelper.SetIsColor(tvi, true);

Tenga en cuenta que usted no puede editar la plantilla de programación. Y aunque pudiera, realmente no ayuda, ya que ya se ha aplicado a los elementos reales.

2021-11-24 14:43:11

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................