Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C WPF-Dockpanel的子对象崩溃,没有调整其他可见子对象的大小_C#_Wpf_Dockpanel - Fatal编程技术网

C# C WPF-Dockpanel的子对象崩溃,没有调整其他可见子对象的大小

C# C WPF-Dockpanel的子对象崩溃,没有调整其他可见子对象的大小,c#,wpf,dockpanel,C#,Wpf,Dockpanel,我很抱歉,如果我没有找到任何关于我的小问题的相关帖子/问题 我有一个带有DockPanel LastChildFill=True的WPF窗口,它承载三个控件: 一个按钮好吗 单标签标题 一个边框中有一个列表框 我要做的是,当正在进行的测试通过时,它没有数据可推入列表框,因此我将其折叠,然后我希望标题标签位于列表框及其边框未使用的可用空间的中心 当我有一个失败或错误,我有数据放在列表框,然后它是可见的,一切都正如预期的 在来这里之前,我尝试了很多事情,在这方面我浪费了足够的时间,因为我需要在这里写

我很抱歉,如果我没有找到任何关于我的小问题的相关帖子/问题

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

一个按钮好吗 单标签标题 一个边框中有一个列表框 我要做的是,当正在进行的测试通过时,它没有数据可推入列表框,因此我将其折叠,然后我希望标题标签位于列表框及其边框未使用的可用空间的中心

当我有一个失败或错误,我有数据放在列表框,然后它是可见的,一切都正如预期的

在来这里之前,我尝试了很多事情,在这方面我浪费了足够的时间,因为我需要在这里写作的时候完成其他事情

当listbox+边框折叠时,有人能告诉我如何解决我的问题吗

以下是此窗口的xaml代码:

<Window x:Class="NI.TestStand.WPFControls.Views.DisplayBannerView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:NI.TestStand.WPFControls"
        mc:Ignorable="d"
        Title="DisplayBanner" x:Name="DisplayBannerMessage" Height="500" Width="800" MinHeight="300" MinWidth="500">
    <Window.Resources>
        <Style x:Name="BaseWindowFont" TargetType="Window">
            <Setter Property="FontFamily" Value="Arial"></Setter>
            <Setter Property="FontSize" Value="16"></Setter>
        </Style>
    </Window.Resources>
    <Grid>
        <Border BorderBrush="Black" BorderThickness="2">
            <DockPanel LastChildFill="True">
                <Button 
                    x:Name="butOK" 
                    DockPanel.Dock="Bottom" 
                    Margin="10" Content="OK" 
                    HorizontalAlignment="Center" 
                    VerticalAlignment="Top" 
                    Padding="10" Width="150" 
                    Click="butOK_Click"/>

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

                <Border BorderBrush="Chocolate" BorderThickness="2" Margin="10" Name="messages_border">
                    <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>
            </DockPanel>
        </Border>
    </Grid>
</Window>
以下是显示通过和错误的图像,以显示差异。 在绿色石灰窗口中通过的标题信息应该在窗口框的中间,因为列表框被折叠了。
谢谢你的帮助和时间

我会这样设计整个项目:

<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的绑定,我已经编好了,您可以使用它们来指示结果,您可能已经有了其他的绑定,并且您需要两个不同的转换器,一个用于转换为可见性,另一个用于转换为int Grid.RowSpan

当值为true Pass时,将从转换器返回Visibility.Collapsed和2。如果该值为false,则返回Visibility.Visible和1


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

我接受您的回答,因为您指出了一个解决方案,它正是我所需要的。我的解决方案的主要区别在于,我已经控制了包含列表框的边框的可见性,因此避免了使用另一个转换器。相反,我对该可见性进行了绑定,并使整数与它一起工作。我现在只有一个将可见性转换为整数的转换器。非常感谢您提出的解决方案。是的,我不确定您的后端到底有什么,以及如何使用绑定。很高兴它起作用了!: