programing

WPF 버튼 이미지를 '회색'하시겠습니까?

muds 2023. 5. 21. 12:03
반응형

WPF 버튼 이미지를 '회색'하시겠습니까?

간단한 것이 있습니다.Button포함하는 컨트롤Image내용으로서 이의를 제기합니다.나는 원하기 때문에 설정합니다.Image0.5의 불투명도는 다음과 같습니다.Button에 대한 추가 시각적 신호를 제공하기 위해 비활성화됩니다.Button상황.

XAML에서 그 결과를 얻는 가장 간단한 방법은 무엇입니까?도와주셔서 고마워요.

이미지 스타일에서 트리거를 사용합니다. (버튼 스타일에 넣는 것이 더 자연스럽지만, 버튼 스타일은 성가신 기술적인 이유로 이미지에 쉽게 영향을 줄 수 없습니다.버튼의 제어 템플릿에서 수행할 수 있지만, 여기서 원하는 것에 비해 너무 많습니다.)

<Button>
  <Image Source="something.png">
    <Image.Style>
      <Style TargetType="Image">
        <Style.Triggers>
          <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Opacity" Value="0.5" />
          </Trigger>
        </Style.Triggers>
      </Style>
    </Image.Style>
  </Image>
</Button>

버튼이 비활성화되면 이미지가 비활성화되므로 이미지 자체의 IsEnabled 속성에서 직접 트리거할 수 있습니다.다른 경우에는 트리거하려는 Button 속성이 이미지에 상속되지 않을 수 있습니다. 이 경우에는 FindEstor RelativeSource와 함께 DataTrigger를 사용하여 포함된 버튼에 바인딩해야 합니다.

더 일반적인 것을 원하는 경우 창 또는 사용자 컨트롤의 리소스 섹션에 이 정보를 저장합니다.

<UserControl.Resources>     
    <Style x:Key="ImageEnabled" TargetType="Image">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value="0.25"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

그리고 실제 버튼에서 이것을 수행합니다.

<Button>
    <Image Source="{StaticResource LinkImage}" Style="{StaticResource ImageEnabled}"/>
</Button>

적용할 수 있는 보다 일반적인 스타일은 다음과 같습니다.

<Style TargetType="Button">
    <Style.Resources>
        <Style TargetType="Image">
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Opacity" Value="0.5" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Style.Resources>
</Style>

만약 당신이 전체 버튼을 회색으로 만들고 싶다면, 버튼 자체를 스타일링하는 것이 저에게 효과가 있었습니다.모든 버튼 내용이 회색으로 표시되는 것 같습니다.

                    <Button.Style>
                        <Style TargetType="Button">
                            <Style.Triggers>
                                <Trigger Property="IsEnabled" Value="False">
                                    <Setter Property="Opacity" Value=".75"/>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </Button.Style>

이전 솔루션은 불투명도만 변경하고 이미지 색상은 변경하지 않습니다. 다음과 같이 이미지를 그레이스케일로 변환해야 합니다.toggleButton용으로 했는데 버튼에도 동일한 방법을 사용할 수 있습니다.

<ToggleButton>
    <ToggleButton.Style>
        <Style TargetType="{x:Type ToggleButton}">
           <Setter Property="Content">
               <Setter.Value>
                    <Image
                         RenderOptions.BitmapScalingMode="HighQuality"
                         RenderOptions.EdgeMode="Aliased"
                         Source="/Resources/imageForButton.png"
                         Stretch="UniformToFill" />
                 </Setter.Value>
             </Setter>
             <Style.Triggers>
                 <Trigger Property="IsChecked" Value="False">
                     <Setter Property="Content">
                         <Setter.Value>
                             <Image
                               RenderOptions.BitmapScalingMode="HighQuality"
                               RenderOptions.EdgeMode="Aliased"
                               Stretch="UniformToFill">
                                 <Image.Source>
                                    <FormatConvertedBitmap
                                       x:Name="myImageFormat"
                                       DestinationFormat="Gray8"
                                       Source="/Resources/imageForButton.png" />
                                 </Image.Source>
                             </Image>
                       </Setter.Value>
                </Setter>
             </Trigger>
          </Style.Triggers>
       </Style>
    </ToggleButton.Style>
</ToggleButton>

언급URL : https://stackoverflow.com/questions/2530912/graying-out-a-wpf-button-image

반응형