我有一个WPF DataGrid和DataGrid的每一行都有一个扩展显示行详细信息。扩展在扩展扩展首次移动滚动条。
我不想当扩张器扩张滚动条来移动。任何解决方案来解决这个问题?
到目前为止,我曾尝试以下,但它不是一个很好的解决方案。
private void Expander_Expanded(object sender, RoutedEventArgs e)
{
ScrollViewer scrollViewer = GetVisualChild<ScrollViewer>(dgUsers);
scrollViewer.ScrollToHorizontalOffset(0);
}
由于我没有名誉权,现在我不能发布图片。
编辑:图片链路连接
Image shows the scrollbar move http://i62.tinypic.com/24gvsb4.png
编辑:
我附上了代码示例所以这将是其他人更容易重新创建他们的最终问题。
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel Margin="10" LastChildFill="True">
<Button Height="30" DockPanel.Dock="Top" Content="click me" Click="Button_Click"/>
<DataGrid Name="dgUsers" AutoGenerateColumns="False"
RowHeaderWidth="30"
HeadersVisibility="All">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name1}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Name1}" />
<DataGridTextColumn Header="Name" Binding="{Binding Name1}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Name1}" />
<DataGridTextColumn Header="Name" Binding="{Binding Name1}" />
<DataGridTextColumn Header="Name" Binding="{Binding Name1}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Name1}" />
<DataGridTextColumn Header="Name" Binding="{Binding Name1}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Name1}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Name1}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<Expander Header="tewsting" ExpandDirection="Down" Expanded="Expander_Expanded"
>
<DataGrid AutoGenerateColumns="True" RowHeaderWidth="20" HeadersVisibility="All" DataContext="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Details}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Details}" />
<DataGridTextColumn Header="Name" Binding="{Binding Details}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Details}" />
<DataGridTextColumn Header="Name" Binding="{Binding Details}" />
<DataGridTextColumn Header="Name" Binding="{Binding Details}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Details}" />
<DataGridTextColumn Header="Name" Binding="{Binding Details}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Details}" />
</DataGrid.Columns>
</DataGrid>
</Expander>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</DockPanel>
namespace WpfApplication2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<User> users = new List<User>();
users.Add(new User() { Id1 = 1, Name1 = "asdfasdfadsfadsfadsfasdfasdf", Birthday = new DateTime(1971, 7, 23) });
users.Add(new User() { Id1 = 2, Name1 = "Jane Doe", Birthday = new DateTime(1974, 1, 17) });
users.Add(new User() { Id1 = 3, Name1 = "Sammy Doe", Birthday = new DateTime(1991, 9, 2) });
dgUsers.ItemsSource = users;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ScrollViewer scrollViewer = GetVisualChild<ScrollViewer>(dgUsers);
double Position = scrollViewer.ContentHorizontalOffset;
Console.WriteLine(Position);
}
private static T GetVisualChild<T>(DependencyObject parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)
{
child = GetVisualChild<T>(v);
}
if (child != null)
{
break;
}
}
return child;
}
private void Expander_Expanded(object sender, RoutedEventArgs e)
{
ScrollViewer scrollViewer = GetVisualChild<ScrollViewer>(dgUsers);
scrollViewer.ScrollToHorizontalOffset(0);
}
}
public class User
{
public int Id1 { get; set; }
public string Name1 { get; set; }
public int Id2 { get { return 2000000; } }
public string Name2 { get { return "aadafasdfasdsfasdfadsfadsfadsf"; } }
public int Id3 { get { return 2000000; } }
public string Name3 { get { return "aadafasdfasdsfasdfadsfadsfadsf;"; } }
public int Id4 { get { return 2000000; } }
public string Name4 { get { return "aadafasdfasdsfasdfadsfadsfadsf;"; } }
public int Id5 { get { return 2000000; } }
public string Name5 { get { return "aadafasdfasdsfasdfadsfadsfadsf;"; } }
public int Id6 { get { return 2000000; } }
public string Name6 { get { return "aadafasdfasdsfasdfadsfadsfadsf;"; } }
public DateTime Birthday { get; set; }
public string Details
{
get
{
return String.Format("{0} was born on {1} and this is a long description of the person.", this.Name1, this.Birthday.ToLongDateString());
}
}
}
}
万一有人看此之后,尝试设置在ScrollViewer中的CanContentScroll属性等于False。