Элемент ControlTemplate также изменяет размер при изменении размера шаблона элемента управления, в котором он был связан - WPF XAML - PullRequest
0 голосов
/ 20 февраля 2020

Я хочу знать, возможно ли изменить размер элемента внутри шаблона controlTemplate путем изменения размера элемента, с которым он был связан.

Это код для шаблона ControlTemplate Button:

    <ControlTemplate x:Name="normalButton" x:Key="roundedEdge" TargetType="Button">
        <Grid>
            <Rectangle Fill="{TemplateBinding Background}" RadiusX="16" RadiusY="16" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="4"/>
            <Ellipse Width="38" Height="38" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,12,0,0" Fill="{StaticResource tertiaryColor}"/>
            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0, 0, 0, 6"/>
        </Grid>
    </ControlTemplate>

и это controlTemplate, привязанный к кнопке:

 <Button x:Name="button2_Copy2" Width="112" Height="80"Template="{StaticResource roundedEdge}""/>

Если я изменю размер элемента управления Button, эллипс в ControlTemplate также изменится, но его размер не должен совпадать с размером элемента управления Button, в котором он был связан.

1 Ответ

0 голосов
/ 26 февраля 2020

Вы можете использовать Binding и Convert:

 <Window.Resources>
        <local:DoubleToDoubleConvert x:Key="DoubleToDoubleConvert"></local:DoubleToDoubleConvert>
        <ControlTemplate x:Name="normalButton" x:Key="roundedEdge" TargetType="Button">
            <Grid>
                <Rectangle  Fill="{TemplateBinding Background}" RadiusX="16" RadiusY="16" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="4"/>
                <Ellipse  Width="{TemplateBinding Width ,Converter={StaticResource DoubleToDoubleConvert}}" Height="{TemplateBinding Height,Converter={StaticResource DoubleToDoubleConvert}}" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,12,0,0" Fill="Red"/>
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0, 0, 0, 6"/>

            </Grid>


        </ControlTemplate>
    </Window.Resources>


  public class DoubleToDoubleConvert : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            double reValue = System.Convert.ToInt32(value);
            return reValue / 3;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            double strValue = (double)value;
            return value;
        }
    }

Спасибо.

...