C#WPF - Dockpanel的孩子们因为没有调整其他可见孩子的大小而崩溃了

时间:2017-11-21 15:09:30

标签: c# wpf dockpanel

对不起,如果我没有找到关于我这个小烦恼问题的相关帖子/问题。

我有一个带有DockPanel(LastChildFill = True)的WPF窗口,它有三个控件:

  • 一键(确定)
  • 一个标签(标题)
  • 其中包含列表框的一个边框

我所做的是当正在进行的测试是"通过"它没有数据可以推入列表框,所以我将其折叠,然后我希望标题标签位于列表框及其边框未使用的可用空间的中心。

当我有一个"失败"或者"错误",我有数据放在列表框中然后它是可见的,一切都和预期的一样。

在来到这里之前我尝试了很多东西,因为我需要在我写这篇文章的时候完成其他工作,所以我已经失去了足够的时间。

有人能指出我如何解决我的问题(当列表框+边框折叠时居中标签)?

以下是此窗口的xaml代码:

library(plm)
data <- employmentsez
data$lfirms2 <- data$lfirms*data$lfirms
data$sezname <- as.factor(data$sezname)
data <- plm.data(data, index=c("code", "year"))
fit1 <- plm(lemployment ~ lfirms + lfirms2 + lfirmsfor + lwages +  nuts51 + lgovgrants + leusubs + agrishare, data=data, model="within", effect="individual")
summary(fit1)


    R-Squared:      0.085873
    Adj. R-Squared: -0.039652

以下是显示PASS和ERROR以显示差异的图像 当列表框折叠时,绿色石灰窗口中的PASSED标题消息应该位于窗口中间..

Pass Banner Image

Error Banner Image

感谢您的所有帮助和时间

1 个答案:

答案 0 :(得分:1)

我会设计像这样的整个事情:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Border BorderBrush="Black" BorderThickness="2"
            Grid.RowSpan="{Binding PassErrorBooleanProperty, Converter={StaticResource BoolToRowSpanConverter}}">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>

            <Label 
                    x:Name="main_message" 
                    Padding="15" 
                    FontSize="50"                     
                    Content="MAIN_MSG" 
                    DockPanel.Dock="Top"
                    HorizontalAlignment="Center" 
                    VerticalContentAlignment="Center" />

            <Border Grid.Row="1" BorderBrush="Chocolate" BorderThickness="2" Margin="10" Name="messages_border"
                    Visibility="{Binding PassErrorBooleanProperty, Converter={StaticResource BoolToVisibilityConverter}}">
                <ListBox                                                               
                        Background="{Binding ElementName=DisplayBannerMessage, Path=Background}" 
                        Foreground="Black" 
                        ScrollViewer.HorizontalScrollBarVisibility="Auto" 
                        ScrollViewer.VerticalScrollBarVisibility="Auto"                     
                        ScrollViewer.CanContentScroll="True"
                        VerticalContentAlignment="Top" 
                        VerticalAlignment="Stretch"
                        x:Name="detail_message">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding}" ToolTip="{Binding}"/>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Border>

            <Button Grid.Row="2"
                    x:Name="butOK" 
                    DockPanel.Dock="Bottom" 
                    Margin="10" Content="OK" 
                    HorizontalAlignment="Center" 
                    VerticalAlignment="Top" 
                    Padding="10" Width="150" 
                    Click="butOK_Click" />
        </Grid>
    </Border>
</Grid>

PassErrorBooleanProperty有两个绑定(我已经将其用作表示结果的东西,你可能还有其他的东西已存在),而你#&# 39; d需要两个不同的转换器,一个用于转换为Visibility,另一个用于转换为intGrid.RowSpan)。

当值为true(通过)时,您将从转换器返回Visibility.Collapsed2。当值为false时,您将返回Visibility.Visible1

如果您需要有关转换器的更多信息,请告诉我,尽管有很多信息可以使用IValueConverter创建布尔值到可见性转换器等。