首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wpf -绑定问题ActualWidth

wpf -绑定问题ActualWidth
EN

Stack Overflow用户
提问于 2013-08-09 06:33:05
回答 1查看 4.1K关注 0票数 0

我有以下XAML代码:

代码语言:javascript
复制
<Grid Grid.Row="2" Name="grid_StatusBar">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="{Binding ElementName=wrapPanel, Path=ActualWidth}" />
        <ColumnDefinition Width="30" />
    </Grid.ColumnDefinitions>
    <ProgressBar Grid.Column="0" HorizontalAlignment="Stretch" Margin="5,5,5,5" Name="progressBar1" VerticalAlignment="Stretch" />
    <WrapPanel Grid.Column="1" Name="wrapPanel" HorizontalAlignment="Right">
        <Label Content="1" Height="28" HorizontalAlignment="Right" Margin="0,0,0,0" Name="label_Dataset" VerticalAlignment="Stretch" Visibility="Collapsed" />
        <Label Content="/20" Height="28" HorizontalAlignment="Right" Margin="0,0,0,0" Name="label_TotalDatasets" VerticalAlignment="Stretch" Visibility="Collapsed" />
        <Label Content="ID:" Height="28" HorizontalAlignment="Right" Margin="0,0,0,0" Name="label_IDText" VerticalAlignment="Stretch" />
        <Label Content="no id" Height="28" HorizontalAlignment="Right" Margin="0,0,0,0" Name="labelID" VerticalAlignment="Stretch" />
    </WrapPanel>
    <Button Grid.Column="2" Name="button_Help" Height="30" Width="30" Content="?" HorizontalAlignment="Right" VerticalAlignment="Stretch" Click="button_Help_Click" >
</Grid>

我试图显示的进度栏尽可能宽,同时改变一些标签的可见度和设置不同的文本(因此不同的长度/宽度)。

因此,我有不同的职能:

  • 在程序启动时,labelID标签的"no id“文本将被替换为一个内部值。宽度被更新:OK
  • 在代码运行的情况下,我更改了前两个标签的可见性,ColumnDefinition.Width没有更新,只显示了前两个标签(因为没有足够的位置来容纳所有4个标签在wrapPanel ActualWidth:ERROR!中)。
  • 如果我将Visibility属性从前两个标签从Collapsed更改为Visible,则从开始开始,所有标签的可见性都是Visible,并且显示了所有标签:OK
  • 从以前的状态开始,我将前两个标签的可见性更改为CollapsedColumnDefinition.Width被更新,ProgressBar尽可能宽,所有文本都显示:OK

有人能帮帮我吗?我不明白为什么宽度不更新..。

注意:在运行以下代码的窗口中使用两个按钮更改了可见性:

代码语言:javascript
复制
label_Dataset.Visibility = System.Windows.Visibility.Visible;
label_TotalDatasets.Visibility = System.Windows.Visibility.Visible;

编辑:我的目标是使用最小空间(一行)显示可见标签,以便使ProgressBar尽可能使用最大宽度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-09 07:25:57

无法根据子元素的宽度更改父元素的宽度。在您的示例中,该列是WrapPanel的父列,因此在网格/列已经调整大小之后,WrapPanelActualWidth才可用。

即使您编写了代码来尝试并避免这种情况,您仍然会遇到一个问题,因为度量/布局序列将成为可重用的。每当列的大小更改时,它都会重新布局所有子控件,其中一个是WrapPanel。这将导致更改ActualWidthWrapPanel --实际上导致无限循环。为了防止此堆栈溢出方案,框架会立即检测布局/度量值周期中的任何重入性,并引发异常。

我不太清楚你想达到什么目的。为什么要在WrapPanel中使用标签?当然,您总是希望这4个标签位于同一条线上,或者至少在两行上。

如果是这样的话,我会将第二列的宽度设置为"Auto“,并将标签放在另一个容器中,即:

  • 如果希望将所有标签包装起来,如强制将WrapPanel的宽度降至其最小宽度,请使用: ..。你的标签在这里。
  • 如果希望所有标签保持在同一行,请使用: ..。你的标签在这里。
  • 如果您想要两行,请使用: .头两个标签.这里有第二个标签.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18141219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档