Eng Mohamed Bassuny Ответов: 1

Я столкнулся с проблемой в редизайне кнопки переключения в ширину и высоту


я хочу перепроектировать кнопку переключения на новую
но когда я меняю ширину и высоту в XMAL это меняет некоторые но другие не меняются

как я могу связать ширину и высоту и заставить ее нормально работать в любой ширине и высоте, введенных пользователем
это картина того, с чем я столкнулся Изображение

кстати я новичок в WPF

спасибо

Что я уже пробовал:

<Window.Resources>

    <Style x:Key="FocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle
                        Margin="2"
                        RadiusX="22"
                        RadiusY="22"
                        SnapsToDevicePixels="true"
                        Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
                        StrokeDashArray="1 2"
                        StrokeThickness="1" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD" />
    <SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070" />
    <SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD" />
    <SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1" />
    <SolidColorBrush x:Key="Button.Pressed.Background" Color="#FFC4E5F6" />
    <SolidColorBrush x:Key="Button.Pressed.Border" Color="#FF2C628B" />
    <SolidColorBrush x:Key="Button.Disabled.Background" Color="#FFF4F4F4" />
    <SolidColorBrush x:Key="Button.Disabled.Border" Color="#FFADB2B5" />
    <SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383" />

    <Style x:Key="ToggleButtonStyle1" TargetType="{x:Type ToggleButton}">
        <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
        <Setter Property="Background" Value="{StaticResource Button.Static.Background}" />
        <Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}" />
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="HorizontalContentAlignment" Value="Center" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="Padding" Value="1" />

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                    <Grid x:Name="ToggleButtonGrid" SnapsToDevicePixels="true" >

                        <Border
                            x:Name="border"
                            Background="Transparent"
                            CornerRadius="25" />

                        <Rectangle
                            x:Name="ToggleButtonBack"
                            Fill="#FFF4F4F5"
                            RadiusX="26"
                            RadiusY="26"
                            Stroke="DimGray"
                            StrokeThickness="0.2" />

                        <Ellipse
                            x:Name="Dot"
                            Width="40"
                            Height="40"
                            Margin="5,0,0,0"
                            HorizontalAlignment="Left"
                            Fill="White"
                            Stroke="DimGray"
                            StrokeThickness="0.2" />


                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="Button.IsDefaulted" Value="true">
                            <Setter TargetName="border" Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter TargetName="border" Property="Background" Value="{StaticResource Button.MouseOver.Background}" />
                            <Setter TargetName="border" Property="BorderBrush" Value="{StaticResource Button.MouseOver.Border}" />
                        </Trigger>
                        <Trigger Property="IsPressed" Value="true">
                            <Setter TargetName="border" Property="Background" Value="{StaticResource Button.Pressed.Background}" />
                            <Setter TargetName="border" Property="BorderBrush" Value="{StaticResource Button.Pressed.Border}" />
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter TargetName="border" Property="Background" Value="{StaticResource Button.Disabled.Background}" />
                            <Setter TargetName="border" Property="BorderBrush" Value="{StaticResource Button.Disabled.Border}" />
                        </Trigger>

                        <Trigger Property="IsChecked" Value="true">
                            <Setter TargetName="Dot" Property="Margin" Value="55,0,0,0" />
                            <Setter TargetName="ToggleButtonBack" Property="Fill" Value="#FF3AEC62" />
                        </Trigger>
                        <Trigger Property="IsChecked" Value="False">
                            <Setter TargetName="Dot" Property="Margin" Value="5,0,0,0" />
                        </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</Window.Resources>
<Grid>
    <ToggleButton
        x:Name="toggleButton"
        Width="100"
        Height="50"
        Margin="10"
        HorizontalAlignment="Left"
        VerticalAlignment="Top"
        Content="ToggleButton"
        Style="{DynamicResource ToggleButtonStyle1}" />

</Grid>

1 Ответов

Рейтинг:
2

George Swan

Мне кажется, что ваша проблема заключается в том, что вы используете фиксированные размеры для вашего слайдера внутри ToggleButton. Так что, когда размер кнопки увеличивается, диапазон ползунка не изменяется пропорционально. Чтобы решить эту проблему, вы можете поместить элементы в отдельные ячейки внутри Grid и используйте проценты для изменения размера элементов в качестве Grid изменение размера. Но есть и более простой подход. Не запускайте его Margin размер чтобы изменить положение сидера, вызовите HorizontalAlignment. Избегайте установки каких-либо абсолютных значений в Elipse Что-то вроде этого.


 <Ellipse
x:Name="Dot"
Width="{Binding ActualHeight, ElementName= ToggleButtonGrid, Mode=OneWay}"
Stretch="Uniform"
Margin="5"
HorizontalAlignment="Left"
Fill="White"
Stroke="DimGray"
StrokeThickness="0.2" / >

 <Trigger Property="IsChecked" Value="true" >
     <Setter TargetName="Dot" Property="HorizontalAlignment" Value="Right" / >
     <Setter TargetName="ToggleButtonBack" Property="Fill" Value="#FF3AEC62" / >
 </Trigger >
 <Trigger Property="IsChecked" Value="False" >
     <Setter TargetName="Dot" Property="HorizontalAlignment" Value="Left" / >
 </Trigger >


Eng Mohamed Bassuny

Привет , спасибо, что попытались мне помочь

Используя "Binding ActualHeight", он дает эллипсу полную высоту, но она меньше фактической высоты "ToggleButtonGrid"
это, возможно, решит проблему изменения размера, но придаст эллипсу не очень хорошую форму с помощью кнопки отверстия