كيفية الوصول إلى العنصر داخل datatemplate من GridViewColumnheader؟
-
27-09-2019 - |
سؤال
كيف يمكنني الوصول إلى عنصر (TextBlock) داخل datatemplate من GridViewColumnheader من الكود ؟؟؟؟ أريد أن أركز على رأس العمود.
المحلول
فقط أي GridViewColumnheader أو واحد على وجه الخصوص؟ يمكنك استخدام هذا الرمز
List<GridViewColumnHeader> allGridViewColumnHeaders = GetVisualChildCollection<GridViewColumnHeader>(listView);
foreach (GridViewColumnHeader columnHeader in allGridViewColumnHeaders)
{
TextBlock textBlock = GetVisualChild<TextBlock>(columnHeader);
if (textBlock != null)
{
}
}
وطرق المساعد
public List<T> GetVisualChildCollection<T>(object parent) where T : Visual
{
List<T> visualCollection = new List<T>();
GetVisualChildCollection(parent as DependencyObject, visualCollection);
return visualCollection;
}
private void GetVisualChildCollection<T>(DependencyObject parent, List<T> visualCollection) where T : Visual
{
int count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++)
{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
if (child is T)
{
visualCollection.Add(child as T);
}
else if (child != null)
{
GetVisualChildCollection(child, visualCollection);
}
}
}
private T GetVisualChild<T>(DependencyObject parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)
{
child = GetVisualChild<T>(v);
}
if (child != null)
{
break;
}
}
return child;
}
تحديث
لجعل GridViewColumnheader احصل على التركيز يمكنك التركيز
columnHeader.Focus();
بناءً على المكان الذي تقوم به قد لا يعمل ، يمكنك المحاولة
EventHandler eventHandler = null;
eventHandler = new EventHandler(delegate
{
listView.LayoutUpdated -= eventHandler;
GridViewColumnHeader columnHeader = GetVisualChild<GridViewColumnHeader>(listView);
columnHeader.Focus();
});
listView.LayoutUpdated += eventHandler;
تأكد أيضًا من أن GridViewColumnheader لديه السمات التالية
<GridViewColumnHeader IsTabStop="True" Focusable="True">
لا تنتمي إلى StackOverflow