WPF: Как мне изменить стиль кнопки, когда изменился его контекстный идентификатор? - PullRequest
0 голосов
/ 03 июля 2019

У меня есть два стиля кнопок в качестве статических ресурсов. BtnStyleOpen и BtnStyleClose. Кнопка с Name="V001" и в .cs I Связать контекст с объектом BtnV001.Content = content; В объекте содержимого есть свойство status. Я хотел бы изменить стиль кнопки при изменении статуса. Мой код:

<Button x:Name="Btn001" Grid.Column="5" Grid.Row="7"

                    Click="BtnV_Click" MouseRightButtonUp="BtnV_MouseRightButtonUp"

                    Content="{Binding Path=Status, UpdateSourceTrigger=PropertyChanged}">


                    <Button.Triggers>
                        <Trigger Property="Content"  Value=1>
                            <Setter Property="Style" Value="{StaticResource BtnStyleOpen}" />
                        </Trigger>
                        <Trigger Property="Content"  Value=0>
                            <Setter Property="Style" Value="{StaticResource BtnStyleClose}" />
                        </Trigger>
                    </Button.Triggers>
                </Button>

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Вы можете реализовать IValueConverter и применить его к привязке между Button.Style и DataContext.Status:

public class StatusToStyleConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
    if (value is Status status)
    {
      if (status == "open")
      {
        return (Style) Application.Current.FindResource("BtnStyleOpen");
      }

      if (status == "close")
      {
        return (Style) Application.Current.FindResource("BtnStyleClose");
      }
    }
    return Binding.DoNothing;
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  {
     throw new NotSupportedException();
  }
}

. Вы должны добавить экземпляр IValueConverter? в некоторый ресурс:

<Button.Resource>
  <StatusToStyleConverter x:Key"StatusToStyleConverter" />
<Button.Resource>

Затем примените Style:

<Button Style="{Binding Status, Converter={StaticResource StatusToStyleConverter}} />

Поскольку вы не поделились подробностями своего типа Status, вам, вероятно, придется изменить оценку условия вконвертер.

0 голосов
/ 03 июля 2019

попробуйте привязать его к событию, которое вызывает изменение. попробуйте использовать datatrigger. как то так:

 <ToggleButton x:Name="togglebutton_Testing">
                <TextBlock x:Name="Textblock_Testing">
                    <TextBlock.Style>
                        <Style TargetType="{x:Type TextBlock}">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=IsChecked, ElementName=togglebutton_Testing}" Value="false">
                                    <Setter Property="Text" Value="Open"/>
                                </DataTrigger>
                                <DataTrigger Binding="{Binding Path=IsChecked, ElementName=togglebutton_Testing}" Value="true">
                                    <Setter Property="Text" Value="Close"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
                </TextBlock>
            </ToggleButton>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...