更改内容时如何防止按钮调整大小?

时间:2010-12-16 15:42:22

标签: wpf

我在网格中有一个按钮。按钮的大小是网格布局中的一个组件。我想以编程方式更改按钮的内容,而不会调整按钮大小并导致重新布局包含它的网格。

这是网格的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 个答案:

答案 0 :(得分:2)

如果要在渲染按钮后冻结大小,可以处理其Loaded事件,然后将按钮Width设置为此时的ActualWidth。

Colin E。

答案 1 :(得分:2)

完成加载元素后,您可以将Button的宽度和高度保存为固定值:

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

如果它不起作用我建议将其保存在某些属性中,更改内容后,您可以将保存的宽度和高度设置为按钮。