2010-12-16 4 views
0

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

Это 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 или язык или что-то еще. Я думаю, что замораживание размера после того, как оно изначально было изложено, было бы хорошо, но я не смог понять, как это сделать.

+0

Вы хотите это строго в xaml, или вы в порядке с небольшим кодом? – 2010-12-16 15:48:12

ответ

2

Если вы хотите заморозить размер после того, как кнопка была отображена, вы можете обработать свое событие Loaded, а затем установить в этот момент кнопки Width, равные его ActualWidth.

Colin E.

2

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

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

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

Смежные вопросы