我有一个具有简单LogView
的应用程序。从程序收集到该日志,并滚动日志,因此用户总是可以看到最后一条消息。在ApplicationMainView
中,有一个网格,几行和两个行之间的网格插图。日志位于屏幕的底部,网格插图器位于日志上方(用户可以调整日志窗口大小的大小(。
这是一个问题:当应用程序启动并将消息添加到日志窗口中时,网格插图开始移动,日志窗口开始增长。当用户更改带有网格的日志大小时,将消息添加到窗口中,网格插图器不会移动,并且日志窗口仍然保持其大小。这是显示情况的GIF图像。
我应该在哪里更改代码,以便LogView
从应用程序开始,用户不必移动GridSplitter?
ApplicationMainView
的代码,其中 LogView
是:
<Window
x:Class="UI.ApplicationMainView"
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:UI">
<Grid>
<Grid.RowDefinitions>
<RowDefinition
Height="Auto" />
<RowDefinition
Height="Auto" />
<RowDefinition
Height="*" />
<RowDefinition
Height="Auto" />
<RowDefinition
Height="Auto" />
</Grid.RowDefinitions>
<!-- Other controls removed for simplifaction-->
<local:FilesView
Grid.Row="2"
DataContext="{Binding Files}" />
<GridSplitter
Grid.Row="3"
Height="5"
ResizeDirection="Rows"
ResizeBehavior="PreviousAndNext"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
ShowsPreview="True" />
<!-- Here is the log -->
<local:LogView
Grid.Row="4"
DataContext="{Binding Log}" />
</Grid>
</Window>
LogView
的代码:
<UserControl
x:Class="UI.LogView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace: UI">
<HeaderedContentControl>
<HeaderedContentControl.Template>
<ControlTemplate
TargetType="HeaderedContentControl">
<DockPanel>
<ContentPresenter
DockPanel.Dock="Top"
ContentSource="Header" />
<ContentPresenter />
</DockPanel>
</ControlTemplate>
</HeaderedContentControl.Template>
<HeaderedContentControl.Header>
<Border
Background="Gray"
CornerRadius="0,20,0,0">
<Label
Content="Log" />
</Border>
</HeaderedContentControl.Header>
<Border
BorderThickness="2,0,2,2"
BorderBrush="Gray">
<Grid>
<Grid.RowDefinitions>
<RowDefinition
Height="*" />
<RowDefinition
Height="Auto" />
</Grid.RowDefinitions>
<DataGrid
x:Name="LogGrid"
Grid.Row="0"
AutoGenerateColumns="False"
CanUserAddRows="False"
IsReadOnly="True"
GridLinesVisibility="None"
MinHeight="50"
ItemsSource="{Binding AllMessages}">
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Time}"
CanUserSort="False"
CanUserReorder="False"
IsReadOnly="True"
Header="Time" />
<DataGridTextColumn
Binding="{Binding Message}"
Width="*"
CanUserSort="False"
CanUserReorder="False"
IsReadOnly="True"
Header="Message" />
</DataGrid.Columns>
</DataGrid>
<DockPanel
Grid.Row="1"
LastChildFill="False">
<Button
Content="Clear"
Command="{Binding ClearLogCommand}" />
<Button
Content="Copy clipboard"
Command="{Binding CopyLogClipboardCommand}" />
</DockPanel>
</Grid>
</Border>
</HeaderedContentControl>
</UserControl>
LogView
背后的代码(用于滚动日志(:
using System.Collections.Specialized;
using System.Windows.Controls;
namespace UI
{
public partial class LogView : UserControl
{
public LogView()
{
InitializeComponent();
((INotifyCollectionChanged)LogGrid.Items).CollectionChanged += OnLogViewCollectionChanged;
}
private void OnLogViewCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (LogGrid.Items.Count > 0)
{
LogGrid.ScrollIntoView(LogGrid.Items[LogGrid.Items.Count - 1]);
}
}
}
}
您定义了网格的底数:
<RowDefinition Height="Auto" />
这使logview增长。
您必须将Height
定义为固定尺寸
Height="200"
或屏幕的百分比
Height="*"
或Height="2*"