When theme change,the control tree is changed.
3139 단어 change
svALlItems = (ScrollViewer)(VisualTreeHelper.GetChild(lvAllItems, 0) as Border).Child;
when change theme from areo to non-aero ,for example as classic theme, application crash,the reason at above statement.
Use VisualTreeHelper to see VisualTree,The method as bellow:
string GetVisualTreeInfo(DependencyObject target)
{
int i = 0;
int childCount = 0;
DependencyObject parentObject = target;
DependencyObject childObject = null;
string format = "Rank:{0} childIndex:{1} {2} ";
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("VisualTree:");
while (true)
{
childCount = VisualTreeHelper.GetChildrenCount(parentObject);
if (childCount == 0) break;
for (int j = 0; j < childCount; j++)
{
childObject = VisualTreeHelper.GetChild(parentObject, j);
stringBuilder.AppendLine(string.Format(format, i, j, childObject));
}
if (childObject == null) break;
parentObject = childObject;
i++;
}
Debug.WriteLine(stringBuilder.ToString());
return stringBuilder.ToString();
}
When aero theme,visualTree is :
Rank:0 childIndex:0 System.Windows.Controls.Border
Rank:1 childIndex:0 System.Windows.Controls.ScrollViewer
Rank:2 childIndex:0 System.Windows.Controls.Grid
Rank:3 childIndex:0 System.Windows.Shapes.Rectangle
Rank:3 childIndex:1 System.Windows.Controls.ScrollContentPresenter
Rank:3 childIndex:2 System.Windows.Controls.Primitives.ScrollBar Minimum:0 Maximum:0 Value:0
Rank:3 childIndex:3 System.Windows.Controls.Primitives.ScrollBar Minimum:0 Maximum:0 Value:0
When non-aero theme,as classic, visualTree is :
Rank:0 childIndex:0 Microsoft.Windows.Themes.ClassicBorderDecorator
Rank:1 childIndex:0 System.Windows.Controls.ScrollViewer
Rank:2 childIndex:0 System.Windows.Controls.Grid
Rank:3 childIndex:0 System.Windows.Shapes.Rectangle
Rank:3 childIndex:1 System.Windows.Controls.ScrollContentPresenter
Rank:3 childIndex:2 System.Windows.Controls.Primitives.ScrollBar Minimum:0 Maximum:0 Value:0
Rank:3 childIndex:3 System.Windows.Controls.Primitives.ScrollBar Minimum:0 Maximum:0 Value:0
the first child is different ,so when we use VisualTreeHelper like this,plase take care !~
the above statement should change as fllow:
var svALlItems = (ScrollViewer)(VisualTreeHelper.GetChild(listView1, 0) as Decorator).Child;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[자바스크립트] 이벤트 활용표준 이벤트 모델 이벤트를 연결하는 표준 이벤트 모델 고전 이벤트 모델 onkeyup처럼 on으로 시작하는 속성에 함수를 할당해 이벤트 연결하는 고전 이벤트 모델 인라인 이벤트 모델 이러한 고전 이벤트 모델처럼 on...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.