C# C WPF-Dockpanel的子对象崩溃,没有调整其他可见子对象的大小
我很抱歉,如果我没有找到任何关于我的小问题的相关帖子/问题 我有一个带有DockPanel LastChildFill=True的WPF窗口,它承载三个控件: 一个按钮好吗 单标签标题 一个边框中有一个列表框 我要做的是,当正在进行的测试通过时,它没有数据可推入列表框,因此我将其折叠,然后我希望标题标签位于列表框及其边框未使用的可用空间的中心 当我有一个失败或错误,我有数据放在列表框,然后它是可见的,一切都正如预期的 在来这里之前,我尝试了很多事情,在这方面我浪费了足够的时间,因为我需要在这里写作的时候完成其他事情 当listbox+边框折叠时,有人能告诉我如何解决我的问题吗 以下是此窗口的xaml代码:C# C WPF-Dockpanel的子对象崩溃,没有调整其他可见子对象的大小,c#,wpf,dockpanel,C#,Wpf,Dockpanel,我很抱歉,如果我没有找到任何关于我的小问题的相关帖子/问题 我有一个带有DockPanel LastChildFill=True的WPF窗口,它承载三个控件: 一个按钮好吗 单标签标题 一个边框中有一个列表框 我要做的是,当正在进行的测试通过时,它没有数据可推入列表框,因此我将其折叠,然后我希望标题标签位于列表框及其边框未使用的可用空间的中心 当我有一个失败或错误,我有数据放在列表框,然后它是可见的,一切都正如预期的 在来这里之前,我尝试了很多事情,在这方面我浪费了足够的时间,因为我需要在这里写
<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创建布尔到可见性转换器等的信息。我接受您的回答,因为您指出了一个解决方案,它正是我所需要的。我的解决方案的主要区别在于,我已经控制了包含列表框的边框的可见性,因此避免了使用另一个转换器。相反,我对该可见性进行了绑定,并使整数与它一起工作。我现在只有一个将可见性转换为整数的转换器。非常感谢您提出的解决方案。是的,我不确定您的后端到底有什么,以及如何使用绑定。很高兴它起作用了!: