Как сделать этот стиль универсальным? - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть следующий стиль DataGridCell:

            <Style TargetType="DataGridCell" x:Key="DateChangeAnimation" >
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Path=Date.ValueChanged}" Value="True" />
                            <Condition Binding="{Binding Source={StaticResource BindProxy}, Path=Data.Columns.Date.NotifyChange}" Value="True" />
                        </MultiDataTrigger.Conditions>
                        <MultiDataTrigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation AutoReverse="True" From="#1F1F1F" To="#FFFF88" Duration="0:0:0.2" Storyboard.TargetProperty="Background.Color" FillBehavior="Stop" />
                                </Storyboard>
                            </BeginStoryboard>
                        </MultiDataTrigger.EnterActions>
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>

Этот стиль имеет привязки, установленные для одной ячейки столбца, так как мне нужно применить его к 20 или более столбцам, есть ли способ определить стильодин раз в общем виде и создать его столько раз, сколько необходимо, указав только переменные для привязки?

Ответы [ 3 ]

2 голосов
/ 23 февраля 2012

Я не совсем уверен, что вы спрашиваете, но если это то, что я думаю, то короткий ответ - нет (может быть, да).

Я говорю это, потому что я думаю, что выВы пытаетесь как-то заменить написанные вами BindingExpressions без создания нового стиля для каждого варианта.

Итак, почему, может быть, да?Ну, вы могли бы использовать DynamicResource и программно создавать стили, заменяя BindingExpressions, где это необходимо.


В качестве другой альтернативы, вы можете создать пользовательский элемент управления (или UserControl), который предоставляет свойства зависимостей, а затем связать вашизменение значений для этих свойств, но это может не стоить проблем.


Вот то, что я предполагаю, что вы пытаетесь достичь, используя более простой пример.

<Style x:Key="MyDesiredGenericStyle" x:TargetType="TextBox">
  <Setter Property="Template">
  <Setter.Value>
    <Border ...>
        <StackPanel>
            <TextBlock Text="{Binding SomeGenericWay}" />
            <ContentPresenter />
        </StackPanel>
    </Border>
  </Setter.Value>
  </Setter>
</Style>

vs.

<Style x:Key="MyDesiredStyleA" x:TargetType="TextBox">
  <Setter Property="Template">
  <Setter.Value>
    <Border ...>
        <StackPanel>
            <TextBlock Text="{Binding Path=PropA}" />
            <ContentPresenter />
        </StackPanel>
    </Border>
  </Setter.Value>
  </Setter>
</Style>

<Style x:Key="MyDesiredStyleB" x:TargetType="TextBox">
  <Setter Property="Template">
  <Setter.Value>
    <Border ...>
        <StackPanel>
            <TextBlock Text="{Binding Path=PropB}" />
            <ContentPresenter />
        </StackPanel>
    </Border>
  </Setter.Value>
  </Setter>
</Style>
0 голосов
/ 24 февраля 2012

Простой, извлеките ключ:

        <Style TargetType="DataGridCell">
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Path=Date.ValueChanged}" Value="True" />
                        <Condition Binding="{Binding Source={StaticResource BindProxy}, Path=Data.Columns.Date.NotifyChange}" Value="True" />
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation AutoReverse="True" From="#1F1F1F" To="#FFFF88" Duration="0:0:0.2" Storyboard.TargetProperty="Background.Color" FillBehavior="Stop" />
                            </Storyboard>
                        </BeginStoryboard>
                    </MultiDataTrigger.EnterActions>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
0 голосов
/ 23 февраля 2012

Не указывайте ключ, поэтому по умолчанию он будет установлен на все объекты DataGridCell в приложении.

...