public class UIHelper
{ /// <summary>
/// 在Visual里找到想要的元素
/// childName可为空,不为空就按名字找
/// </summary>
public static T FindChild<T>(DependencyObject parent, string childName)
where T : DependencyObject
{
if (parent == null ) return null ;
T foundChild = null ;
int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
for ( int i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
T childType = child as T;
if (childType == null )
{
// 住下查要找的元素
foundChild = FindChild<T>(child, childName);
// 如果找不到就反回
if (foundChild != null ) break ;
}
else if (! string .IsNullOrEmpty(childName))
{
var frameworkElement = child as FrameworkElement;
// 看名字是不是一样
if (frameworkElement != null && frameworkElement.Name == childName)
{
//如果名字一样返回
foundChild = (T)child;
break ;
}
}
else
{
// 找到相应的元素了就返回
foundChild = (T)child;
break ;
}
}
return foundChild;
}
/// <summary>
/// 得到指定元素的集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="depObj"></param>
/// <returns></returns>
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj)
where T : DependencyObject
{
if (depObj != null )
{
for ( int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
} |
public class FocusAdvancement
{
public static bool GetAdvancesByEnterKey(DependencyObject obj)
{
return ( bool )obj.GetValue(AdvancesByEnterKeyProperty);
}
public static void SetAdvancesByEnterKey(DependencyObject obj, bool value)
{
obj.SetValue(AdvancesByEnterKeyProperty, value);
}
public static readonly DependencyProperty AdvancesByEnterKeyProperty =
DependencyProperty.RegisterAttached( "AdvancesByEnterKey" , typeof ( bool ), typeof (FocusAdvancement),
new UIPropertyMetadata(OnAdvancesByEnterKeyPropertyChanged));
static void OnAdvancesByEnterKeyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var element = d as UIElement;
if (element == null ) return ;
if (( bool )e.NewValue) element.KeyDown += Keydown;
else element.KeyDown -= Keydown;
}
static void Keydown( object sender, KeyEventArgs e)
{
if (!e.Key.Equals(Key.Enter)) return ;
var element = sender as UIElement;
if (element != null ) element.MoveFocus( new TraversalRequest(FocusNavigationDirection.Next));
}
}
|
xmlns:FOU= "clr-namespace:WPFAppVM.AppViews.AppCustomViews"
<TextBox FOU:FocusAdvancement.AdvancesByEnterKey= "True" Width= "120" ></TextBox>
<TextBox IsReadOnly= "True" FOU:FocusAdvancement.AdvancesByEnterKey= "True" Width= "120" ></TextBox>
<Button Height= "30" Width= "80" FOU:FocusAdvancement.AdvancesByEnterKey= "True" >保存</Button>
|
本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/p/3155049.html,如需转载请自行联系原作者