gpt4 book ai didi

c# - 在自定义样式的按钮中获取 ScrollViewer

转载 作者:行者123 更新时间:2023-11-30 17:51:49 25 4
gpt4 key购买 nike

我的界面中有一个自定义按钮,使用以下样式定义:

<Style x:Key="KinectCustomButton" TargetType="k:KinectCircleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="k:KinectCircleButton">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="60*"/>
<RowDefinition Height="40*"/>
</Grid.RowDefinitions>
<k:KinectCircleButton Grid.Row="0" VerticalAlignment="Bottom" Foreground="{TemplateBinding Foreground}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
<ContentPresenter x:Name="content"/>
</k:KinectCircleButton>
<ScrollViewer Grid.Row="1">
<TextBlock TextAlignment="Center" VerticalAlignment="Top" TextWrapping="Wrap" Text="{TemplateBinding Label}" Foreground="{TemplateBinding Foreground}" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" FontWeight="{TemplateBinding FontWeight}"/>
</ScrollViewer>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

我在我的窗口中实例化了其中的六个按钮。现在我需要访问每个按钮的 ScrollViewer 元素。我试过这个方法:How can I find WPF controls by name or type?但它不工作。我还尝试访问自定义 KinectCustomButton 的模板属性,但是如果我尝试找到 ScrollViewer 实例,我会得到来自模板的实例而不是按钮实例中的实例(因此其中的 TextBlock 文本为空).有什么方法可以得到我想要的吗?

最佳答案

要在代码中找到 ScrollViewer,请尝试以下函数 GetScrollViewer():

public static DependencyObject GetScrollViewer(DependencyObject Object)
{
if (Object is ScrollViewer)
{
return Object;
}

for (int i = 0; i < VisualTreeHelper.GetChildrenCount(Object); i++)
{
var child = VisualTreeHelper.GetChild(Object, i);
var result = GetScrollViewer(child);

if (result == null)
{
continue;
}
else
{
return result;
}
}

return null;
}

使用示例:

if (MyListBox.Items.Count > 0) 
{
ScrollViewer scrollViewer = GetScrollViewer(MyListBox) as ScrollViewer;

if (scrollViewer != null)
{
scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + 20);
}
}

Don't manipulate UI elements in procedural code

我想,@HighCore,想说的是,使用 UI 元素的代码,在 XAML 代码和 C# 代码之间形成控制,这在使用 MVVM 模板时可能会妥协。

当项目增加时,这种关系可能会导致问题,因此,对于 future ,尝试借助附加的行为、命令来实现 UI 元素的逻辑,这可以在 Style< 中使用/UI 元素的模板

关于c# - 在自定义样式的按钮中获取 ScrollViewer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19009621/

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