gpt4 book ai didi

c# - 在哪里可以找到列出控件中所有状态的属性?

转载 作者:行者123 更新时间:2023-12-04 04:49:30 26 4
gpt4 key购买 nike

我正在查看 winrt 项目的模板,它具有以下后退按钮样式:

<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="PointerOver">
...
</VisualState>
<VisualState x:Name="Pressed">
...
</VisualState>
<VisualState x:Name="Disabled">
...
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused">
...
</VisualState>
<VisualState x:Name="Unfocused" />
<VisualState x:Name="PointerFocused" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>

我假设上面的 VisualStates 是按钮状态,但我不知道在按钮对象上在哪里跟踪它以及框架如何将状态绑定(bind)到视觉状态。

我一直在网上四处寻找以获得更好的理解,但无济于事。请帮助我理解这一切是如何联系在一起的。我知道您可以从后面的代码手动转到特定状态,但这里似乎有一个我遗漏的约定。

最佳答案

没有列出控件状态的没有属性。

根据 MSDN Control 作者必须提供一个control contract 以便 ControlTemplate 作者知道在模板中放入什么。

控制契约包含三个元素:

  • 控件逻辑使用的视觉元素。
  • 控件的状态和每个状态所属的组。
  • 在视觉上影响控件的公共(public)属性。

视觉元素和状态都作为类属性提供

[TemplatePart(Name = "XXX", Type = typeof(RepeatButton))]
[TemplatePart(Name = "YYY", Type = typeof(RepeatButton))]
[TemplateVisualState(Name = "Focused", GroupName = "FocusedStates")]
[TemplateVisualState(Name = "Unfocused", GroupName = "FocusedStates")]

你应该检查默认的Control Styles and Templates我想您要找的所有数据都会在那里。

如果你必须在运行时获取数据,那么你可以使用 Reflection 来获取给定的类属性:

System.Reflection.MemberInfo info = typeof(MyClass);
object[] attributes = info.GetCustomAttributes(true);

for (int i = 0; i < attributes.Length; i++)
{
if (attributes[i] is TemplatePart || attributes[i] is TemplateVisualState)
{
System.Console.WriteLine(((TemplateVisualState) attributes[i]).Name);
}
}

阅读此 MSDN Article这会让事情变得更清楚

关于c# - 在哪里可以找到列出控件中所有状态的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17636915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com