У меня есть кнопка «Обновить» в моем приложении 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>
<Trigger Property="IsEnabled" Value="False"><Setter (set content to whatever) /></Trigger>
. В этом суть того, как текст становится серым (вероятно) в шаблоне управления по умолчанию. - person 15ee8f99-57ff-4f92-890c-b56153   schedule 27.02.2019