Отключение иконки CommandButton - PullRequest
       0

Отключение иконки CommandButton

0 голосов
/ 27 февраля 2019

У меня в приложении WPF есть кнопка «Обновить», прикрепленная к команде

   <ToolBar>
        <Button Command="{Binding RefreshCommand}">
                <Viewbox Width="16" Height="16">
                    <Rectangle Width="16" Height="16">
                        <Rectangle.Fill>
                            <DrawingBrush>
                                <DrawingBrush.Drawing>
                                    <DrawingGroup>
                                        <DrawingGroup.Children>
                                            <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
                                            <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M16,8C16,12.411 12.411,16 8,16 3.589,16 0,12.411 0,8 0,6.597 0.384,5.212 1.088,4L0,4 0,0 8,0 8,8 4,8C4,10.206 5.794,12 8,12 10.206,12 12,10.206 12,8 12,6.656 11.331,5.41 10.21,4.666L9.377,4.112 11.592,0.78 12.425,1.333C14.663,2.822,16,5.314,16,8" />
                                            <GeometryDrawing Brush="#FF00529C" Geometry="F1M15,8C15,11.859 11.859,15 8,15 4.14,15 1,11.859 1,8 1,6.076 1.801,4.292 3.121,3L1,3 1,1 7,1 7,7 5,7 5,4.002C3.766,4.931 3,6.401 3,8 3,10.757 5.243,13 8,13 10.757,13 13,10.757 13,8 13,6.321 12.164,4.763 10.764,3.833L11.871,2.167C13.83,3.469,15,5.649,15,8" />
                                        </DrawingGroup.Children>
                                    </DrawingGroup>
                                </DrawingBrush.Drawing>
                            </DrawingBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                </Viewbox>
        </Button>
    </ToolBar>

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

Как это бывает, у меня действительно есть фрагмент XAML, который я хочу использовать длявыделенное серым цветом состояние isEnabled = false, мне просто нужно знать, как настроить его на использование приведенного выше фрагмента для значка, чтобы применить его к состоянию isEnabled = true, и применить другой фрагмент для значения false. (Извините, этот вопрос кажется неубедительным.WPF для меня относительно новый).

Поскольку этот значок выходит из библиотеки изображений VS, я также имею его в формате bmp и png. Рисование его внутри xaml не является обязательным.

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

<Viewbox Width="16" Height="16">
  <Rectangle Width="16" Height="16">
    <Rectangle.Fill>
      <DrawingBrush>
        <DrawingBrush.Drawing>
          <DrawingGroup>
            <DrawingGroup.Children>
              <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
              <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M16,8C16,12.411 12.411,16 8,16 3.589,16 0,12.411 0,8 0,6.597 0.384,5.212 1.088,4L0,4 0,0 8,0 8,8 4,8C4,10.206 5.794,12 8,12 10.206,12 12,10.206 12,8 12,6.656 11.331,5.41 10.21,4.666L9.377,4.112 11.592,0.78 12.425,1.333C14.663,2.822,16,5.314,16,8" />
              <GeometryDrawing Brush="#FF424242" Geometry="F1M15,8C15,11.859 11.859,15 8,15 4.14,15 1,11.859 1,8 1,6.076 1.801,4.292 3.121,3L1,3 1,1 7,1 7,7 5,7 5,4.002C3.766,4.931 3,6.401 3,8 3,10.757 5.243,13 8,13 10.757,13 13,10.757 13,8 13,6.321 12.164,4.763 10.764,3.833L11.871,2.167C13.83,3.469,15,5.649,15,8" />
            </DrawingGroup.Children>
          </DrawingGroup>
        </DrawingBrush.Drawing>
      </DrawingBrush>
    </Rectangle.Fill>
  </Rectangle>
</Viewbox>

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Как подсказал Эд Планкетт, вы можете установить содержимое в триггере.

Вот полный пример того, как вы можете это сделать.Я связал свойство IsEnabled кнопки с флажком, чтобы проверить его.

Помните, если вы собираетесь изменить свойство в триггере, вы должны установить свойство с помощью Setter в стилевместо того, чтобы устанавливать его как обычное свойство.

<Window x:Class="ButtonTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ButtonTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="80" Width="800">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*"/>
      <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>

    <Button Grid.Column="0" IsEnabled="{Binding IsChecked, ElementName=cb}" >
      <Button.Style>
        <Style TargetType="Button">

          <Setter Property="Content">
            <Setter.Value>
              <Viewbox Width="16" Height="16">
                <Rectangle Width="16" Height="16">
                  <Rectangle.Fill>
                    <DrawingBrush>
                      <DrawingBrush.Drawing>
                        <DrawingGroup>
                          <DrawingGroup.Children>
                            <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
                            <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M16,8C16,12.411 12.411,16 8,16 3.589,16 0,12.411 0,8 0,6.597 0.384,5.212 1.088,4L0,4 0,0 8,0 8,8 4,8C4,10.206 5.794,12 8,12 10.206,12 12,10.206 12,8 12,6.656 11.331,5.41 10.21,4.666L9.377,4.112 11.592,0.78 12.425,1.333C14.663,2.822,16,5.314,16,8" />
                            <GeometryDrawing Brush="#FF00529C" Geometry="F1M15,8C15,11.859 11.859,15 8,15 4.14,15 1,11.859 1,8 1,6.076 1.801,4.292 3.121,3L1,3 1,1 7,1 7,7 5,7 5,4.002C3.766,4.931 3,6.401 3,8 3,10.757 5.243,13 8,13 10.757,13 13,10.757 13,8 13,6.321 12.164,4.763 10.764,3.833L11.871,2.167C13.83,3.469,15,5.649,15,8" />
                          </DrawingGroup.Children>
                        </DrawingGroup>
                      </DrawingBrush.Drawing>
                    </DrawingBrush>
                  </Rectangle.Fill>
                </Rectangle>
              </Viewbox>
            </Setter.Value>
          </Setter>

          <Style.Triggers>
            <Trigger Property="IsEnabled" Value="false">
              <Setter Property="Content">
                <Setter.Value>
                  <Viewbox Width="16" Height="16">
                    <Rectangle Width="16" Height="16">
                      <Rectangle.Fill>
                        <DrawingBrush>
                          <DrawingBrush.Drawing>
                            <DrawingGroup>
                              <DrawingGroup.Children>
                                <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
                                <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M16,8C16,12.411 12.411,16 8,16 3.589,16 0,12.411 0,8 0,6.597 0.384,5.212 1.088,4L0,4 0,0 8,0 8,8 4,8C4,10.206 5.794,12 8,12 10.206,12 12,10.206 12,8 12,6.656 11.331,5.41 10.21,4.666L9.377,4.112 11.592,0.78 12.425,1.333C14.663,2.822,16,5.314,16,8" />
                                <GeometryDrawing Brush="#FF424242" Geometry="F1M15,8C15,11.859 11.859,15 8,15 4.14,15 1,11.859 1,8 1,6.076 1.801,4.292 3.121,3L1,3 1,1 7,1 7,7 5,7 5,4.002C3.766,4.931 3,6.401 3,8 3,10.757 5.243,13 8,13 10.757,13 13,10.757 13,8 13,6.321 12.164,4.763 10.764,3.833L11.871,2.167C13.83,3.469,15,5.649,15,8" />
                              </DrawingGroup.Children>
                            </DrawingGroup>
                          </DrawingBrush.Drawing>
                        </DrawingBrush>
                      </Rectangle.Fill>
                    </Rectangle>
                  </Viewbox>
                </Setter.Value>
              </Setter>
            </Trigger>
          </Style.Triggers>

        </Style>
      </Button.Style>

    </Button>

    <CheckBox x:Name="cb" Content="Enabled" Grid.Column="1"/>

  </Grid>
</Window>
0 голосов
/ 28 февраля 2019

Вы можете использовать Triggers для установки Content на основе значения свойства IsEnabled.

<Button Command="{Binding RefreshCommand}">
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="True">
                    <Setter Property="Content">
                        <Setter.Value>
                            <!--Your drawing / image when it's enabled-->
                        </Setter.Value>
                    </Setter>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Content">
                        <Setter.Value>
                            <!--Your drawing / image when it's disabled-->
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...