【发布时间】:2013-06-04 16:27:46
【问题描述】:
我的应用程序的某些元素具有自定义大小调整事件,它们都有效。然而,他们被一个案例搞砸了:
当将鼠标悬停在窗口的边框上时,使光标成为调整大小的句柄,然后单击(但不要拖动),元素的大小调整不正确,并且我的处理程序没有被触发。
我一直在寻找这样的活动,但找不到任何匹配的东西。我想简单地为这个事件创建一个处理程序,以避免调整我的元素大小时出现故障。
我正在使用 C#/WPF 和 .NET 4
窗口的xaml:
<Window x:Class="XHealth.MainWindow"
Name="mainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DataGridTemplateSample"
xmlns:XH="clr-namespace:XHealth"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
SizeChanged="update_size"
Title="XHealth" Loaded="Window_Loaded" WindowState="Normal" WindowStartupLocation="CenterScreen" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" SizeToContent="WidthAndHeight" WindowStyle="ThreeDBorderWindow" MinWidth="650" MinHeight="648" Width="Auto" VerticalAlignment="Top" DataContext="{Binding}" PreviewKeyDown="Window_KeyDown">
事件处理程序:
public void update_size(object sender, RoutedEventArgs e )
{
if (resultsTab.IsSelected){
Grid.SetRowSpan(dataGrid1, 2);
Grid.SetRowSpan(dataGrid2, 2);
}
}
此处理程序按预期执行,但在未拖动调整大小手柄时不会触发,这让我相信单击调整大小手柄是一个不同的事件。
此外,这只发生一次 - 一旦我的调整大小处理程序生效,单击调整大小处理程序无效。
【问题讨论】:
-
发布相关的 XAML 和代码。否则都是猜测。
-
老兄,我不知道你在说什么。这不是在 WPF 中进行布局的正确方法。您不处理 WPF 中的大小事件。实际上,除非严格需要,否则您通常不会处理任何事件。 WPF 布局系统与分辨率无关,并提供了更快乐的方式来实现各种布局。发布您需要的屏幕截图,我可以告诉您在 WPF 中执行此操作的正确方法。
-
link 在第一个窗口中,数据网格按预期填充,但是当单击边框时,您会得到第二张图片。这是一行 (*) 和另一空行 (也是 *) 中的数据网格。这样做是为了避免出现第三张图片,即当数据网格填充有大型数据源时会发生这种情况,并且窗口会根据数据网格中的内容进行拉伸。
-
这可以通过不在网格中放置任何
*来解决。此外,如果窗口设置为SizeToContent,您应该只使用SizeToContent=Width以防止窗口无限缩放。删除所有事件处理程序的东西,这是黑客。发布相关的 XAML,以便我更好地理解。 -
谢谢,解决了!