WPF에서 고 대비를 지원하고 싶습니다.
7736 단어 WPF
SystemParameters.HighContrastKey
첨부 속성에 바인딩 해보자
SystemParameters.HighContrastKey
를 DynamicResource
마크업 확장으로 가져오면 고대비 설정이 바뀔 때 동적으로 값이 바뀌게 됩니다.그것을 적당한 자작 첨부 프로퍼티에 바인드 하는 것으로 하이 콘트라스트의 설정이 바뀌었을 때에 값이 바뀌는 표시로서 사용할 수 있습니다. 그리고는, 그 첨부 프로퍼티의 값을 트리거로 해 설정하는 색을
Style
로 설정하도록(듯이) 해야 했습니다.높은 콘트라스트인지 여부를 유지하기 위한 첨부 속성입니다.
HighContrast.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace WpfHighContrast
{
public class HighContrast
{
public static bool GetValue(DependencyObject obj)
{
return (bool)obj.GetValue(ValueProperty);
}
public static void SetValue(DependencyObject obj, bool value)
{
obj.SetValue(ValueProperty, value);
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.RegisterAttached("Value", typeof(bool), typeof(HighContrast), new PropertyMetadata(false));
}
}
그리고 이것을 사용해
Style
로 색을 낼 수 있습니다. 예로서 TextBox 의 배경색과 전경색을 바꾸어 보았습니다.MainWindow.xaml
<Window x:Class="WpfHighContrast.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:WpfHighContrast"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<StackPanel>
<TextBox>
<TextBox.Style>
<Style TargetType="TextBox">
<!-- ハイコントラストの設定が変わると、この添付プロパティの値が変わる -->
<Setter Property="local:HighContrast.Value" Value="{DynamicResource {x:Static SystemParameters.HighContrastKey}}" />
<Style.Triggers>
<!-- データトリガーで色の設定を分ける -->
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=(local:HighContrast.Value)}" Value="False">
<Setter Property="Foreground" Value="White" />
<Setter Property="Background" Value="ForestGreen" />
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=(local:HighContrast.Value)}" Value="True">
<!-- もし独自色を出したければここに設定 -->
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</StackPanel>
</Window>
실행 결과
고대비 설정을 하지 않은 상태에서 기동합니다.
시작된 상태에서 Windows 10 설정에서 고대비를 켭니다.
런타임에 제대로 색이 바뀌고 있네요. 하이 콘트라스트가 아닌 경우는 독자적인 색으로 하이 콘트라스트의 경우는, 하이 콘트라스트의 설정으로 지정된 색을 우선 (이것이 WPF 의 컨트롤의 디포의 거동) 하게 되어 있습니다.
Reference
이 문제에 관하여(WPF에서 고 대비를 지원하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/okazuki/items/9428aa8e63df84a34ef3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)