Как создать кнопку с одинаковой шириной и высотой? - PullRequest
1 голос
/ 21 июля 2011

Я хотел бы создать кнопку, размер которой соответствует ее наибольшему краю.

Причина этого в том, что я хочу, чтобы кнопка представляла собой небольшой информационный кружок, встроенный в столбец DataGrid.

В настоящее время у меня есть:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Content="i" Padding="2" Margin="0"
                    VerticalAlignment="Center"
                    HorizontalAlignment="Center"
                    Width="{Binding Source=Self, Path=Height}">
                <Button.Template>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Grid>
                            <Ellipse Fill="#FFF4F4F5" Stroke="#FF6695EB"/>
                            <ContentPresenter Margin="0"
                                              RecognizesAccessKey="False"
                                              SnapsToDevicePixels="True"
                                              VerticalAlignment="Center"
                                              HorizontalAlignment="Center"
                                              />
                        </Grid>
                    </ControlTemplate>
                </Button.Template>
            </Button>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

Создайте класс, полученный из Button, и переопределите Измерение, например,

public class SquareButton : Button
{
    protected override Size MeasureOverride(Size constraint)
    {
        Size size = base.MeasureOverride(constraint);
        size.Height = size.Width = Math.Max(size.Height, size.Width);
        return size;
    }
}

Затем вы можете использовать его примерно так:

<local:SquareButton 
    Content="i" Padding="2" Margin="0"
    VerticalAlignment="Center"
    HorizontalAlignment="Center">
    <local:SquareButton.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <Grid>
                <Ellipse Fill="#FFF4F4F5" Stroke="#FF6695EB"/>
                <ContentPresenter Margin="0"
                    RecognizesAccessKey="False"
                    SnapsToDevicePixels="True"
                    VerticalAlignment="Center"
                    HorizontalAlignment="Center"
                    />
            </Grid>
        </ControlTemplate>
    </local:SquareButton.Template>
</local:SquareButton>
1 голос
/ 21 июля 2011

Создание пользовательского элемента управления - SquareButton

public class SquareButton : Button
{
    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
    {
        if (e.Property == HeightProperty || e.Property == WidthProperty)
            this.Height = this.Width = Math.Max(this.Width, this.Height);

        base.OnPropertyChanged(e);
    }
}
...