滚动条
This commit is contained in:
@@ -23,6 +23,10 @@
|
|||||||
<ListView x:Name="UsersList" Margin="0,0,0,0" IsEnabled="True" SelectionChanged="UsersList_SelectionChanged" Grid.Row="1" Grid.RowSpan="2"/>
|
<ListView x:Name="UsersList" Margin="0,0,0,0" IsEnabled="True" SelectionChanged="UsersList_SelectionChanged" Grid.Row="1" Grid.RowSpan="2"/>
|
||||||
<TextBox x:Name="InputBox" Margin="0,0,0,0" TextWrapping="Wrap" Text="" Grid.Row="2" Grid.ColumnSpan="3" Grid.Column="1" />
|
<TextBox x:Name="InputBox" Margin="0,0,0,0" TextWrapping="Wrap" Text="" Grid.Row="2" Grid.ColumnSpan="3" Grid.Column="1" />
|
||||||
<Button Content="Send" HorizontalAlignment="Right" Margin="0,0,0,0" VerticalAlignment="Bottom" Width="75" Click="Button_Click" Height="20" Grid.Row="2" Grid.Column="3"/>
|
<Button Content="Send" HorizontalAlignment="Right" Margin="0,0,0,0" VerticalAlignment="Bottom" Width="75" Click="Button_Click" Height="20" Grid.Row="2" Grid.Column="3"/>
|
||||||
<StackPanel x:Name="OutBox" Margin="0,0,0,0" Grid.ColumnSpan="3" Grid.Column="1" Grid.Row="1"/>
|
<ScrollViewer Grid.ColumnSpan="3" Grid.Column="1" Margin="0,0,0,0" Grid.Row="1" >
|
||||||
|
<ScrollViewer.Content>
|
||||||
|
<StackPanel x:Name="OutBox" Margin="0,0,0,0" Grid.ColumnSpan="3" Grid.Column="1" Grid.Row="1" ScrollViewer.VerticalScrollBarVisibility="Hidden"/>
|
||||||
|
</ScrollViewer.Content>
|
||||||
|
</ScrollViewer>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
|
||||||
|
namespace StormChatWPF
|
||||||
|
{
|
||||||
|
public class ScrollViewerExtensions
|
||||||
|
{
|
||||||
|
public static readonly DependencyProperty AlwaysScrollToEndProperty = DependencyProperty.RegisterAttached("AlwaysScrollToEnd", typeof(bool), typeof(ScrollViewerExtensions), new PropertyMetadata(false, AlwaysScrollToEndChanged));
|
||||||
|
private static bool _autoScroll;
|
||||||
|
|
||||||
|
|
||||||
|
private static void AlwaysScrollToEndChanged(object sender, DependencyPropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
ScrollViewer scroll = sender as ScrollViewer;
|
||||||
|
if (scroll != null)
|
||||||
|
{
|
||||||
|
bool alwaysScrollToEnd = (e.NewValue != null) && (bool)e.NewValue;
|
||||||
|
if (alwaysScrollToEnd)
|
||||||
|
{
|
||||||
|
scroll.ScrollToEnd();
|
||||||
|
scroll.ScrollChanged += ScrollChanged;
|
||||||
|
// scroll.SizeChanged += Scroll_SizeChanged;
|
||||||
|
}
|
||||||
|
else { scroll.ScrollChanged -= ScrollChanged; /*scroll.ScrollChanged -= ScrollChanged; */}
|
||||||
|
}
|
||||||
|
else { throw new InvalidOperationException("The attached AlwaysScrollToEnd property can only be applied to ScrollViewer instances."); }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//private static void Scroll_SizeChanged(object sender, SizeChangedEventArgs e)
|
||||||
|
//{
|
||||||
|
// ScrollViewer scroll = sender as ScrollViewer;
|
||||||
|
// if (scroll == null) { throw new InvalidOperationException("The attached AlwaysScrollToEnd property can only be applied to ScrollViewer instances."); }
|
||||||
|
// double d = scroll.ActualHeight + scroll.ViewportHeight + scroll.ExtentHeight;
|
||||||
|
// scroll.ScrollToVerticalOffset(d);
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
public static bool GetAlwaysScrollToEnd(ScrollViewer scroll)
|
||||||
|
{
|
||||||
|
if (scroll == null) { throw new ArgumentNullException("scroll"); }
|
||||||
|
return (bool)scroll.GetValue(AlwaysScrollToEndProperty);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void SetAlwaysScrollToEnd(ScrollViewer scroll, bool alwaysScrollToEnd)
|
||||||
|
{
|
||||||
|
if (scroll == null) { throw new ArgumentNullException("scroll"); }
|
||||||
|
scroll.SetValue(AlwaysScrollToEndProperty, alwaysScrollToEnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static void ScrollChanged(object sender, ScrollChangedEventArgs e)
|
||||||
|
{
|
||||||
|
ScrollViewer scroll = sender as ScrollViewer;
|
||||||
|
if (scroll == null) { throw new InvalidOperationException("The attached AlwaysScrollToEnd property can only be applied to ScrollViewer instances."); }
|
||||||
|
|
||||||
|
|
||||||
|
if (e.ExtentHeightChange == 0) { _autoScroll = scroll.VerticalOffset == scroll.ScrollableHeight; }
|
||||||
|
if (_autoScroll && e.ExtentHeightChange != 0) { scroll.ScrollToVerticalOffset(scroll.ExtentHeight); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -63,6 +63,7 @@
|
|||||||
<Compile Include="MainWindow.xaml.cs">
|
<Compile Include="MainWindow.xaml.cs">
|
||||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="ScrollViewer.cs" />
|
||||||
<Page Include="LogWindow.xaml">
|
<Page Include="LogWindow.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
|
|||||||
Reference in New Issue
Block a user