- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每次焦点从一个 GridViewItem
转移到另一个时,GridView
GotFocus
和 LostFocus
似乎都会触发。有什么方法可以知道 GridView
作为一个整体何时获得焦点和失去焦点?
MyGridView.GotFocus += MyGridView_GotFocus;
MyGridView.LostFocus += MyGridView_LostFocus;
每次焦点从 GridViewItem
移动到 MyGridView
中的另一个时,上述事件 MyGridView_GotFocus 和 MyGridView_LostFocus 都会触发
最佳答案
Is there any way to know when a
GridView
as a whole received and lost focus?
没有直接的方法可以做到这一点。我们只能使用变通方法来模仿该行为。基本思想是因为 GotFocus
和 LostFocus
都是 Routed Events ,我们可以在页面根Grid的GotFocus
和LostFocus
事件中模仿GridView的GotFocus
和LostFocus
。
这是 XAML:
<Grid Name="rootGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Margin="100,50">
<StackPanel VerticalAlignment="Center" >
<GridView Name="myGridView"></GridView>
</StackPanel>
<TextBlock Name="myTb"></TextBlock>
<GridView Name="myGridView2" ></GridView>
<TextBlock Name="output">This is the OutPut Text: </TextBlock>
<Button Name="btnFocus" >Focus Button</Button>
</StackPanel>
</Grid>
代码如下:
public sealed partial class MainPage : Page
{
public List<String> List;
public List<String> List2;
private object PreviousFocusItem;
public MainPage()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
List = new List<string> { "data1_GridView1", "data2_GridView1", "data3_GridView1" };
List2 = new List<string> { "data1_GridView2", "data2_GridView2", "data3_GridView2" };
myGridView.ItemsSource = List;
myGridView2.ItemsSource = List2;
rootGrid.GotFocus += Grid_GotFocus;
rootGrid.LostFocus += Grid_LostFocus;
base.OnNavigatedTo(e);
}
private void Grid_LostFocus(object sender, RoutedEventArgs e)
{
PreviousFocusItem = e.OriginalSource;
}
private void Grid_GotFocus(object sender, RoutedEventArgs e)
{
//get the previous focus Element and current focus Element.
var previous = PreviousFocusItem as UIElement;
var current = e.OriginalSource as UIElement;
//got focus logic
if ((!IsElementInsideGridView(myGridView, previous)) &&IsElementInsideGridView(myGridView,current))
{
//gridView got focus as a whole, put your codes here:
output.Text += "Got Focus+1 \n";
}
//lost focus logic
if ((!IsElementInsideGridView(myGridView, current)) &&(IsElementInsideGridView(myGridView,previous)) )
{
//gridView lost focus as a whole, put your codes here:
output.Text += "Lost Focus+1 \n";
}
}
private bool IsElementInsideGridView(GridView gridView,UIElement element)
{
Point topLeft = gridView.TransformToVisual(this).TransformPoint(new Point());
Rect rectBounds = new Rect(topLeft.X, topLeft.Y, gridView.ActualWidth, gridView.ActualHeight);
IEnumerable<UIElement> hits = VisualTreeHelper.FindElementsInHostCoordinates(rectBounds, element);
if (hits == null || hits.Count() == 0)
{
return false;
}
else
{
return true;
}
}
}
如您所见,每次根 Grid 获得焦点时。如果 PreviousFocusItem 不在 TargetGridView 中,而 CurrentFocusItem 在 TargetGridView 中。这意味着 TargetGridView 作为一个整体获得了焦点。对于 LostFocus,逻辑是相似的。
这是我的完整项目:GridViewFocusSample .
关于c# - GridView LostFocus 和 GotFocus 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38472816/
我有一个使用 WPF 的 C# ComboBox。我有在 ComboBox 的 GotFocus 被激活时执行的代码。问题是每次从 ComboBox 中进行选择时都会执行 GotFocus 事件。例如
我有一个简单的任务要完成,或者至少在外观上...... 我想处理一个窗口当前是否是 Windows 环境中当前选定窗口的事实。 我以为我只需要处理我的窗口的两个事件 LostFocus 和 GotFo
我无法通过单击在 WPF 窗口中触发 GotFocus() 事件。但如果我单击任何控件,它将被触发。 我的要求如下:我有一个主机窗口,它有一个带有两个可以托管用户控件的数据网格的视口(viewport
我是 WPF 开发的新手。 我正在使用 MVVM 模式开发一个 wpf 应用程序。我有一个“ComboBox”和一个“TextBlock”控件。将焦点放在 ComboBox 上时,Textblock
非常简单: private void textBox1_GotFocus(object sender, EventArgs e) { this.textBox1.Text = "AAA"; } 这
我已经创建了一个 WinForms 用户控件。我阅读了一些关于 GotFocus() 和 LostFocus() 事件的地方,但我的用户控件没有在“属性”窗口的“事件”部分提供这些事件。 我什至尝试输
如果另一个字段设置为特定值,我的销售订单 (SalesTable) 中有一些字段需要禁用。为了做到这一点,我覆盖了表单域上的 enter 和 gotFocus 方法(我做了两个来测试它)。代码编译,没
每当我将焦点集中到一个特定单元格时,如果该单元格包含小于 2 的值,则该单元格中的内容应乘以 60。 顺便说一句,我可以通过使用导航键或单击一个特定单元格或任何其他内容将焦点集中到一个特定单元格。 例
当特定表单打开时,当用户将焦点返回到 Access 应用程序时,我试图调用一个事件。以下事件似乎根本没有发生。 Private Sub Form_GotFocus() Call crtList
具有以下 WinForms 对话框形式,我正在处理 GotFocus MyControl 的事件: MyControl 派生自 DevExpress XtraUserControl这又源自 Micro
GotFocus 和 GotKeyboardFocus 以及类似的 LostFocus 和 LostKeyboardFocus 之间有什么区别? 很抱歉这个简单的问题,但是,我用谷歌搜索并阅读了很多博
我有一个包含 ContentControl 的 UserControl .当用户点击这个 ContentControl我要换它ContentTemplate , 使其“可编辑”(例如,而不是标签显示文
每次焦点从一个 GridViewItem 转移到另一个时,GridView GotFocus 和 LostFocus 似乎都会触发。有什么方法可以知道 GridView 作为一个整体何时获得焦点和失去
在 swift Cocoa 中,当 NSTextField 获得编辑焦点时会触发一个事件。我来自 C#,它有 GotFocus() 和 LostFocus() 事件。 对于 NSTextfield,我
我想将 GotFocus 事件添加到 Windows 窗体文本框,所以我使用了 this 中描述的方法问题;它有效,但在我运行我的应用程序几次后,这段代码自行删除,我不知道为什么。 这是不断 self
我正在使用 WM 6.5 (.NET 3.5) 为移动设备开发应用程序,但遇到以下问题: 当在我的表单中的文本框上调用 textBox.gotFocus() 事件时,我调用此文本框的 SelectAl
我想要的:当任何文本框获得焦点时,将边框颜色更改为黄色。 我尝试过的:
我想在单击(或制表符)控件时选择 MaskedTextBox 的所有内容,以便它们可以轻松替换旧内容。我尝试在 Enter 事件中调用 SelectAll(),但这根本不起作用。 我切换到使用 Got
我有一个 prism/mvvm View ,如果 View 获得或失去焦点,我想通知 ViewModel。 我想我需要将 View 的 GotFocus 绑定(bind)到 ViewModel 中的一
我有一个具有 TextBox 的应用程序。获得焦点后,我需要将日历显示为弹出窗口。 我的问题是如何显示订阅 GotFocus 事件并通过 View 模型显示日历? 最佳答案 为像这样的特定于 View
我是一名优秀的程序员,十分优秀!