如何 read/get UWP 中 FrameworkElement 的样式值?
How to read/get Style values of FrameworkElement in UWP?
我需要读取 Padding
等存储在 Button
(或其他 FrameworkElement
)的 Style
中的值。如何做到这一点?
例如,如果我像这样为 Button
制作 Style
:
Style style = new Style(typeof(Button));
style.Setters.Add(new Setter(Button.HeightProperty, 70));
MyButton.Style = style;
所以...我以后如何阅读 Setter HeightProperty
?那么下面的情况呢?如何获得Padding
?
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
<ContentPresenter x:Name="ContentPresenter"
Padding="11,15,7,0"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
我试图通过
获取信息
Style ButtonStyle = MyButton.GetStyle();
但在这之后我完全不知道如何继续。
在第一种情况下,您可以使用 GetValue
方法获取当前应用的值:
var value = (double)MyButton.GetValue(Button.HeightProperty);
或者更简单:
var value = MyButton.Height;
在第二种情况下,问题有点复杂,因为 Padding
是模板本身的一部分,而不是按钮。要访问它,您将需要以下辅助方法:
public IEnumerable<TChildType> FindChildren<TChildType>(DependencyObject parent)
{
var count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
if (child is TChildType typedChild)
{
yield return typedChild;
}
foreach (var nestedChild in FindChildren<TChildType>(child))
{
yield return nestedChild;
}
}
}
这会遍历父项下的 VisualTree
并搜索某种类型的后代。我们可以这样使用它:
var contentPresenter = FindChildren<ContentPresenter>(MyButton).First();
Debug.WriteLine(contentPresenter.Padding);
确保仅在页面实际加载后调用 FindChildren
方法(例如在 Page.Loaded
事件处理程序或 OnNavigatedTo
中),如 Page
构造函数,模板子项尚不存在,助手将 return 没有子项。
我需要读取 Padding
等存储在 Button
(或其他 FrameworkElement
)的 Style
中的值。如何做到这一点?
例如,如果我像这样为 Button
制作 Style
:
Style style = new Style(typeof(Button));
style.Setters.Add(new Setter(Button.HeightProperty, 70));
MyButton.Style = style;
所以...我以后如何阅读 Setter HeightProperty
?那么下面的情况呢?如何获得Padding
?
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
<ContentPresenter x:Name="ContentPresenter"
Padding="11,15,7,0"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
我试图通过
获取信息Style ButtonStyle = MyButton.GetStyle();
但在这之后我完全不知道如何继续。
在第一种情况下,您可以使用 GetValue
方法获取当前应用的值:
var value = (double)MyButton.GetValue(Button.HeightProperty);
或者更简单:
var value = MyButton.Height;
在第二种情况下,问题有点复杂,因为 Padding
是模板本身的一部分,而不是按钮。要访问它,您将需要以下辅助方法:
public IEnumerable<TChildType> FindChildren<TChildType>(DependencyObject parent)
{
var count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
if (child is TChildType typedChild)
{
yield return typedChild;
}
foreach (var nestedChild in FindChildren<TChildType>(child))
{
yield return nestedChild;
}
}
}
这会遍历父项下的 VisualTree
并搜索某种类型的后代。我们可以这样使用它:
var contentPresenter = FindChildren<ContentPresenter>(MyButton).First();
Debug.WriteLine(contentPresenter.Padding);
确保仅在页面实际加载后调用 FindChildren
方法(例如在 Page.Loaded
事件处理程序或 OnNavigatedTo
中),如 Page
构造函数,模板子项尚不存在,助手将 return 没有子项。