因为部分控件默认是Background="{x:Null}",无法获取到鼠标点击的EventArgs(就相当于空的面板)。 
设置成Background="Transparent" 透明色就可以实现了。

判断当前鼠标位置是否在DataGrid当前行

public static bool isItemSelected = false; private void xStepDataGrid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) object item = GetElementFromPoint((ItemsControl)sender, e.GetPosition((ItemsControl)sender)); isItemSelected = (item != null); private object GetElementFromPoint(ItemsControl itemsControl, Point point) UIElement element = itemsControl.InputHitTest(point) as UIElement; while (element != null) if (element == itemsControl) return null; object item = itemsControl.ItemContainerGenerator.ItemFromContainer(element); if (!item.Equals(DependencyProperty.UnsetValue)) return item; element = (UIElement)VisualTreeHelper.GetParent(element); return null; 今天使用 wpf 开发一个小工具,用到了 Mouse LeftButtonDown的 事件 ,但是发现点击后根本不会 触发 事件 。经过一番资料查找,发现是 控件 在捕获了 Mouse LeftButtonDown 事件 后,会将该 事件 的“Handled”设置为True,这个属性是用在 事件 路由中的,当某个 控件 得到一个RoutedEvent,就会检测Handled是否为true,为true则忽略该 事件 。并且, 控件 本身的Click事 本资源包含 控件 样式的基本设置,与各种应用,非常适合初学者 1.直接在代码中设置 控件 样式 2.将ControlTemplate放入资源或字典中, 控件 设置Template,通过key调用 3.将Style放入资源或字典中, 控件 设置Style,通过key调用 4.样式 事件 Triggers及在样式中启动动画 就像属性系统在 WPF 中得到了升级、进化为依赖属性一样, 事件 系统在 WPF 也得到了升级-----进化成为了路由 事件 (Routed Event),并在其基础上衍生出命令传递机制。这些机制在很大程度上减少了对程序员的束缚,让程序的设计和实现更加的灵活,模块之间的耦合度也进一步降低,这一章我们一起来领略一下新消息机制的风采。为了方便程序间对象之间的通讯常需要我们自己定义一些路由 事件 ,说实话,在程序中定义这种能够在对象间“飞来飞去”的 事件 、不再接受直接 事件 的束缚感觉真的很棒!那么我们怎么才能够定义自己的路由 事件 呢? 处理 ListBox 的双击 事件 事件 名称: Mouse DoubleClick。 函数原型:private void ListBox_ Mouse DoubleClick(object sender, Mouse ButtonEventArgs e)。 实参 sender 为 Lis... <!-- button样式--> <Style x:Key="myBtn" TargetType="Button" > <!--<Setter Property="Background" Value="{x:Null}" />--> <Setter... TextBlock与TextBox的区别: TextBlock这个 控件 是只读文本,只能看到,不能对其进行复制文本信息; TextBox这个空间通过IsReadOnly=”True”也可以成为只读文本框,但是,信息文本可以复制出来 TextBox如何设置为多行文本框:TextWrapping=”Wrap”; TextBox如何设置文本框中的字 private void PushOutMessageBox(object sender, RoutedEventArgs e) MessageBox.Show("弹出一个窗口~然后修改右键菜单显示"); //获取或设置右键菜单信息 (e.Source as MenuItem).Header = "hello world"; //设置背景颜色 SolidColorBrush m_scb = new SolidColorBrush(); m_scb.Color = Color.FromRgb(132,132,132); (e.Source as MenuItem).Background = m_scb; 昨晚看到南柯之石的 WPF BUG之四:点击RadioButton的 空白 没有反应,就做了简单的验证,之后发表了一些分析和看法, 但是那个分析不够准确和充分,会误导别人的想法。在此表示歉意。这里我会从头做分析。 由于南柯之石已经描述过bug,这里只是简单说一下:就是在GroupBox的Header上放一个RadioButton,此时鼠标点击RadioButton的某些 空白 区域 没有反应。 ... 在做的一个c#的项目中发现Datagrid没办法直接对鼠标单击进行 响应 ,调用 Mouse Down 事件 也需要点击某一行第二次才能 响应 。所以借助EventSetter来简单的实现了一个。 界面部分的代码 <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Margin="10,38,0,0" VerticalAlignment="Top" Height="257" FontSize="13.333" 按照 WPF 的帮助说明,某些 控件 的路由 事件 被内部处理了,已经被标记为Handled,自行定义的 事件 处理代码便不再起作用了,有时候会很郁闷! 不过 WPF 提供了必要的方法。 1)使用相应的 Preview 事件 。须注意隧道类型的 事件 是从根元素开始执行的。 2)使用AddHandler添加自定义的路由 事件 Mouse Down 事件 的说明 AddHandler方... 目录 WPF 中的 事件 WPF 中的树形结构导入 WPF 中的 事件 事件 WPF 中升级成了路由 事件 ,这种机制在很大程度上减少了对程序员的束缚,使得程序设计与实现变得更加灵活,模块之间的耦合度(coupling degree)进一步降低(因为不同模块间不需要指名道姓的列出绑定/关联)。 WPF 中的树形结构 路由 事件 有路由两字。 路由,可以通俗地理解为路径由来(或者在链路中传递经过的路径),路由器就是这样,记录在网络中传递的经由点,供消息包在节点间传递中转使用。那既然 WPF 中有路由 事件 ,那路由 事件 是在怎样的链路中传递呢?