Изменение размера “галочки” checkbox wpf

299
04 февраля 2020, 21:10

Уже не первый день бьюсь с данной мне проблемой. При изменении FontSize у CheckBox в WPF, текст изменяет свой размер, но окошко с галочкой остается без изменений. И очень неприятно работать с вот с таким вот контролом:

В англоязычном SO нашёл вот такой кусочек разметки, которая как я понял переопределяет ПОЛНОСТЬЮ CheckBox. И где-то там и размеры окошка для галочки. Но галочка не меняет размер. И при добавлении вот этого кода в ресурсы (кода много, скрываю):

    <Style x:Key="FocusVisual"> 
        <Setter Property="Control.Template"> 
            <Setter.Value> 
                <ControlTemplate> 
                    <Rectangle Margin="2" 
                               SnapsToDevicePixels="true" 
                               Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" 
                               StrokeThickness="1" 
                               StrokeDashArray="1 2" /> 
                </ControlTemplate> 
            </Setter.Value> 
        </Setter> 
    </Style> 
    <SolidColorBrush x:Key="OptionMark.Static.Background" 
                     Color="#FFFFFFFF" /> 
    <SolidColorBrush x:Key="OptionMark.Static.Border" 
                     Color="#FF707070" /> 
    <Style x:Key="OptionMarkFocusVisual"> 
        <Setter Property="Control.Template"> 
            <Setter.Value> 
                <ControlTemplate> 
                    <Rectangle Margin="14,0,0,0" 
                               SnapsToDevicePixels="true" 
                               Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" 
                               StrokeThickness="1" 
                               StrokeDashArray="1 2" /> 
                </ControlTemplate> 
            </Setter.Value> 
        </Setter> 
    </Style> 
 
    <SolidColorBrush x:Key="OptionMark.MouseOver.Background" 
                     Color="#FFF3F9FF" /> 
    <SolidColorBrush x:Key="OptionMark.MouseOver.Border" 
                     Color="#FF5593FF" /> 
    <SolidColorBrush x:Key="OptionMark.MouseOver.Glyph" 
                     Color="#FF212121" /> 
    <SolidColorBrush x:Key="OptionMark.Disabled.Background" 
                     Color="#FFE6E6E6" /> 
    <SolidColorBrush x:Key="OptionMark.Disabled.Border" 
                     Color="#FFBCBCBC" /> 
    <SolidColorBrush x:Key="OptionMark.Disabled.Glyph" 
                     Color="#FF707070" /> 
    <SolidColorBrush x:Key="OptionMark.Pressed.Background" 
                     Color="#FFD9ECFF" /> 
    <SolidColorBrush x:Key="OptionMark.Pressed.Border" 
                     Color="#FF3C77DD" /> 
    <SolidColorBrush x:Key="OptionMark.Pressed.Glyph" 
                     Color="#FF212121" /> 
    <SolidColorBrush x:Key="OptionMark.Static.Glyph" 
                     Color="#FF212121" /> 
    <Style TargetType="{x:Type CheckBox}"> 
        <Setter Property="FocusVisualStyle" 
                Value="{StaticResource FocusVisual}" /> 
        <Setter Property="Background" 
                Value="{StaticResource OptionMark.Static.Background}" /> 
        <Setter Property="BorderBrush" 
                Value="{StaticResource OptionMark.Static.Border}" /> 
        <Setter Property="Foreground" 
                Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" /> 
        <Setter Property="BorderThickness" 
                Value="1" /> 
        <Setter Property="Template"> 
            <Setter.Value> 
                <ControlTemplate TargetType="{x:Type CheckBox}"> 
                    <Grid x:Name="templateRoot" 
                          Background="Transparent" 
                          SnapsToDevicePixels="True"> 
                        <Grid.ColumnDefinitions> 
                            <ColumnDefinition Width="Auto" /> 
                            <ColumnDefinition Width="*" /> 
                        </Grid.ColumnDefinitions> 
                        <Grid VerticalAlignment="Center"> 
                            <Border x:Name="checkBoxBorder" 
                                    BorderBrush="{TemplateBinding BorderBrush}" 
                                    BorderThickness="{TemplateBinding BorderThickness}" 
                                    Background="{TemplateBinding Background}" 
                                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                    Margin="1" 
                                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
                                <Grid x:Name="markGrid" 
                                      VerticalAlignment="Center"> 
                                    <Path x:Name="optionMark" 
                                          Data="F1 M 9.97498,1.22334L 4.6983,9.09834L 4.52164,9.09834L 0,5.19331L 1.27664,3.52165L 4.255,6.08833L 8.33331,1.52588e-005L 9.97498,1.22334 Z " 
                                          Fill="{StaticResource OptionMark.Pressed.Glyph}" 
                                          Margin="5" 
                                          Opacity="0" 
                                          Stretch="Uniform" /> 
                                    <Rectangle x:Name="indeterminateMark" 
                                               Fill="{StaticResource OptionMark.Static.Glyph}" 
                                               Margin="2" 
                                               Opacity="0" /> 
                                </Grid> 
                            </Border> 
                        </Grid> 
                        <Grid VerticalAlignment="Center" Grid.Column="1"> 
                            <ContentPresenter x:Name="contentPresenter" 
                                              Grid.Column="1" 
                                              Focusable="False" 
                                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                              Margin="{TemplateBinding Padding}" 
                                              RecognizesAccessKey="True" 
                                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}" /> 
                        </Grid> 
                    </Grid> 
                    <ControlTemplate.Triggers> 
                        <Trigger Property="HasContent" 
                                 Value="true"> 
                            <Setter Property="FocusVisualStyle" 
                                    Value="{StaticResource OptionMarkFocusVisual}" /> 
                            <Setter Property="Padding" 
                                    Value="4,-1,0,0" /> 
                        </Trigger> 
                        <Trigger Property="IsMouseOver" 
                                 Value="true"> 
                            <Setter Property="Background" 
                                    TargetName="checkBoxBorder" 
                                    Value="{StaticResource OptionMark.MouseOver.Background}" /> 
                            <Setter Property="BorderBrush" 
                                    TargetName="checkBoxBorder" 
                                    Value="{StaticResource OptionMark.MouseOver.Border}" /> 
                            <Setter Property="Fill" 
                                    TargetName="optionMark" 
                                    Value="{StaticResource OptionMark.MouseOver.Glyph}" /> 
                            <Setter Property="Fill" 
                                    TargetName="indeterminateMark" 
                                    Value="{StaticResource OptionMark.MouseOver.Glyph}" /> 
                        </Trigger> 
                        <Trigger Property="IsEnabled" 
                                 Value="false"> 
                            <Setter Property="Background" 
                                    TargetName="checkBoxBorder" 
                                    Value="{StaticResource OptionMark.Disabled.Background}" /> 
                            <Setter Property="BorderBrush" 
                                    TargetName="checkBoxBorder" 
                                    Value="{StaticResource OptionMark.Disabled.Border}" /> 
                            <Setter Property="Fill" 
                                    TargetName="optionMark" 
                                    Value="{StaticResource OptionMark.Disabled.Glyph}" /> 
                            <Setter Property="Fill" 
                                    TargetName="indeterminateMark" 
                                    Value="{StaticResource OptionMark.Disabled.Glyph}" /> 
                        </Trigger> 
                        <Trigger Property="IsPressed" 
                                 Value="true"> 
                            <Setter Property="Background" 
                                    TargetName="checkBoxBorder" 
                                    Value="{StaticResource OptionMark.Pressed.Background}" /> 
                            <Setter Property="BorderBrush" 
                                    TargetName="checkBoxBorder" 
                                    Value="{StaticResource OptionMark.Pressed.Border}" /> 
                            <Setter Property="Fill" 
                                    TargetName="optionMark" 
                                    Value="{StaticResource OptionMark.Pressed.Glyph}" /> 
                            <Setter Property="Fill" 
                                    TargetName="indeterminateMark" 
                                    Value="{StaticResource OptionMark.Pressed.Glyph}" /> 
                        </Trigger> 
                        <Trigger Property="IsChecked" 
                                 Value="true"> 
                            <Setter Property="Opacity" 
                                    TargetName="optionMark" 
                                    Value="1" /> 
                            <Setter Property="Opacity" 
                                    TargetName="indeterminateMark" 
                                    Value="0" /> 
                        </Trigger> 
                        <Trigger Property="IsChecked" 
                                 Value="{x:Null}"> 
                            <Setter Property="Opacity" 
                                    TargetName="optionMark" 
                                    Value="0" /> 
                            <Setter Property="Opacity" 
                                    TargetName="indeterminateMark" 
                                    Value="1" /> 
                        </Trigger> 
                    </ControlTemplate.Triggers> 
                </ControlTemplate> 
            </Setter.Value> 
        </Setter> 
    </Style>

CheckBox обретает вот такой вид:

Кажется что лучше, но до тех пор пока не поставишь галочку:

И как то выглядит не очень. Как по мне выглядит это примерно вот так:

Думаю ясно описал проблему. Спасибо за выделенное время для меня.

READ ALSO
Как в EF Core сделать modelBuilder.Configurations.AddFromAssembly

Как в EF Core сделать modelBuilder.Configurations.AddFromAssembly

Внимание! Это перевод вопроса modelBuilderConfigurations

198
Открытые миры на основе звезд

Открытые миры на основе звезд

Я хочу открыть следующий мир на основе количества звездЯ хочу знать, как рассчитать звезды в разных сценах

214
Могу ли я передать значение сразу нескольким объектам?

Могу ли я передать значение сразу нескольким объектам?

Мне нужно сделать остановку объектов при касанииПри касание значение int = -1

163
Дублирование записей в MS SQL Server

Дублирование записей в MS SQL Server

У меня имеется 2 класса сущностей, первый класс:

179