Как предотвратить изменение размера кнопки при изменении содержимого? - PullRequest
0 голосов
/ 16 декабря 2010

У меня есть кнопка в сетке. Размер кнопки является компонентом макета сетки. Я хочу программно изменить содержимое кнопки без изменения ее размера и изменения структуры сетки, в которой она находится.

Это XAML для сетки:

<Grid Grid.Row="0" Margin="5">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <Label Grid.ColumnSpan="4" Grid.Row="0" Style="{StaticResource IfStyle}">Don't have Apache Ant yet?</Label>
    <Label Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Right">Download URL:</Label>
    <TextBox Name="TxtDownloadUrl" Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="1" VerticalAlignment="Center" />
    <Label Grid.Column="0" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Right">Destination Directory:</Label>
    <TextBox Name="TxtDestinationDir" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2" VerticalAlignment="Center" Margin="0,0,10,0" />
    <Button Grid.Row="2" Grid.Column="3" VerticalAlignment="Center" Name="BtnBrowseDestination" HorizontalAlignment="Stretch">...</Button>
    <Canvas Name="ProgressCanvas" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="3" Height="58" Margin="10" SizeChanged="OnCanvasResize">
        <Image Canvas.Left="4" Canvas.Top="4" Source="/VSADTWizards;component/images/Globe.png" Stretch="Fill" Height="48" Width="48" />
        <Image Canvas.Right="4" Canvas.Top="4" Source="/VSADTWizards;component/images/Computer.png" Stretch="Fill" Height="48" Width="48" />
        <Label Canvas.Left="60" Canvas.Top="4" Name="LabelTotalBytes" />
        <Label Canvas.Right="60" Canvas.Top="4" Name="LabelReceivedBytes" />                
    </Canvas>
    <Button Name="BtnInstall" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="3" VerticalAlignment="Center" HorizontalAlignment="Right" Padding="10">Download, Unzip and Install</Button>
</Grid>

Чтобы изменить контент, я делаю простое обновление контента, как это:

BtnInstall.Content = "Cancel Download";
// or
BtnInstall.Content = "Download, Unzip and Install";

Я хочу изменить текст «Загрузить, распаковать и установить» на «Отменить загрузку» и вернуться без изменения размера.

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

Ответы [ 2 ]

2 голосов
/ 16 декабря 2010

После завершения загрузки элемента вы можете сохранить ширину и высоту с кнопки как фиксированные значения:

Button.Height = Button.ActualHeight;
Button.Width = Button.ActualWidth;

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

2 голосов
/ 16 декабря 2010

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

Колин Э.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...