所以我有一个滚动条的自定义模板。它工作得很好,但我想覆盖转角值。在模板上,它设置如下:
<ControlTemplate x:Key="VerticalScroll" TargetType="{x:Type ScrollBar}">
<Grid>
<Border Grid.RowSpan="3" CornerRadius="3" BorderBrush="DarkBlue" BorderThickness="1" Opacity=".6"></Border>
我正在创建我的实例:
<ScrollViewer Padding="0,0,0,0">
<TextBlock Height="23" HorizontalAlignment="Stretch" Margin="0" Name="textBlock1" Text="TextBlock" VerticalAlignment="Top" />
</ScrollViewer>
如何将CornerRadius更改为6?
答案 0 :(得分:0)
我认为没有任何简单的方法可以做到这一点,因为WPF中没有模板继承。您可能需要复制整个模板并针对此特定实例进行修改,或者在样式中设置模板
答案 1 :(得分:0)
使用附加的DependencyProperty。 Attached DependencyProperty允许您存储信息和DependencyObject。
因此,在下面的例子中,针对MainWindow创建一个Attached DependencyProperty。
public static readonly DependencyProperty CornerRadiusProperty = DependencyProperty.RegisterAttached("CornerRadius", typeof(int), typeof(MainWindow));
public static void SetCornerRadius(DependencyObject element, int value)
{
element.SetValue(CornerRadiusProperty, value);
}
public static int GetCornerRadius(DependencyObject element)
{
return (int) element.GetValue(CornerRadiusProperty);
}
然后在Xaml中,在ScrollViewer上分配值
<ScrollViewer Padding="0,0,0,0" this:MainWindow.CornerRadius="20" ... >
并在模板中,使用TemplatedParent绑定引用Attached DependencyProperty。
<ControlTemplate x:Key="ScrollViewerTemplate" TargetType="{x:Type ScrollViewer}">
<Grid>
<Border Grid.RowSpan="3" CornerRadius="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(this:MainWindow.CornerRadius)}" BorderBrush="DarkBlue" BorderThickness="1" Opacity=".6">
我希望这会有所帮助。
答案 2 :(得分:0)
如果您有兴趣从外部设置的唯一属性,则可以将值存储在Tag
中,并使用标记执行TemplateBinding
。
<Border CornerRadius="{TemplateBinding Tag}"/>
并在实例中ScrollViewer:
<ScrollViewer Tag="6"/>
但是,如果您想从外部设置更多属性,子类ScrollViewer并创建自定义DP ,或者您也可以使用attached properties以防对子类化不感兴趣的ScrollViewer。