- 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/
XAML C#不是WEB页面是窗口 点击按钮我: 需要捕获最后一个控件的名称OnFocus 强制控件发生 LostFocus 事件。 最佳答案 //问题:单击 btns 不会在最后输入的元素控件上强制
我有一个简单的任务要完成,或者至少在外观上...... 我想处理一个窗口当前是否是 Windows 环境中当前选定窗口的事实。 我以为我只需要处理我的窗口的两个事件 LostFocus 和 GotFo
在以下简单的 WPF 应用程序中,TextBox设置为在该控件失去焦点时更新属性,如下所示 Test public MainWindow() {
我有一个包含许多 TextBox 的网格,我想调用 NotifyPropertyChanged() 方法来更新一些其他控件,每次这些 TextBox 之一更改值 = 失去焦点(我不想将Property
我在 Silverlight 和 WPF 中有一个应用程序。该错误只发生在 Silverlight 中,但在 WPF 中使用了相同的代码。 在我的应用程序中,有一个 RibbonBar,有几个 Rib
我在一个表单上有一堆控件(文本框和组合框),带有 toolstripcontainer 和 toolstripbuttons 用于保存、取消等以进行编辑。我们正在使用 .Net 3.5 SP1 在 c
引用this MSDN page (或有关此事的任何相关页面),它指出: When you change the focus by using the keyboard, focus events o
我已经创建了一个 WinForms 用户控件。我阅读了一些关于 GotFocus() 和 LostFocus() 事件的地方,但我的用户控件没有在“属性”窗口的“事件”部分提供这些事件。 我什至尝试输
我有一个包含七个文本框的表单,所有文本框都描述了二手车的不同属性。在共享LostFocus我的文本框事件,我需要一个 case 语句来确定特定的 TextBox那失去了焦点。然后我需要执行不同的各种任
我有一个 GUI 应用程序,它使用 InputVerifier 在产生焦点之前检查文本字段的内容。这都是很正常的。然而,昨天发现了一个问题——它似乎是一个错误,但我在任何地方都找不到任何提及。在我将此
我需要在文本框失去焦点时触发服务器端的代码。 我知道有 onblur 客户端事件,并且没有 LostFocus 事件,那么当我的 TextBox 失去焦点时如何导致回发发生? 更新: 我找到了blog
我的情况是,在打开应用程序时,我从文件中读取了大量数据(使用 XMLSerializer )并将其放入 ObservableCollection 中.使用绑定(bind),我向用户呈现数据。当他们更改
我这里的场景非常简单。请查看布局: 和代码隐藏: private void _datePicker_OnLostFocu
这是我的xaml结构 => 这个结构可以多循环。如: 在.cs文件中,我定义事件失去焦点如下 private void text_LostFocus(o
我需要从一个非常大的 xaml 文件中删除所有丢失焦点事件。我计划通过用空字符串查找和替换 (ctrl + H) 所有丢失的焦点事件来做到这一点,例如 替换 LostFocus="txtSampleL
我有一个可编辑的组合框,只要您单击它,就会调用 lostFocus 方法。当它真正失去焦点时它也会被调用。 单击组合框时导致 LostFocus 运行的原因是什么?
目前我绑定(bind)到我的TextBox即: Text="{Binding DocValue, Mode=TwoWay, ValidatesOnDataError
我正在尝试针对对象验证 WPF 表单。当我在文本框中键入某些内容时会触发验证失去焦点回到文本框然后删除我写的任何内容。但是,如果我只是加载 WPF 应用程序并关闭文本框而不从文本框中写入和删除任何内容
我正在尝试创建一种样式,使我的所有 DataGrids 在失去焦点时都选择第 -1 行。我正在做:
为什么我会收到此错误消息?我正在使用事件 setter ! 编辑 我没有使用内联样式。它位于资源中,即: 最佳答案 参见this questio
我是一名优秀的程序员,十分优秀!