c# – 将自定义依赖项属性绑定到自定义WPF样式
发布时间:2020-12-15 04:25:21 所属栏目:百科 来源:网络整理
导读:设计继承的Expander时遇到问题.我的目的是在切换按钮和默认Expander标头中的文本后面有一个进度条. 我有这个XAML代码,它给我标题中的进度条.这是一种定制风格. Style x:Key="CurrentScanExpanderStyle" TargetType="{x:Type local:ProgressExpander}" Setter
设计继承的Expander时遇到问题.我的目的是在切换按钮和默认Expander标头中的文本后面有一个进度条.
我有这个XAML代码,它给我标题中的进度条.这是一种定制风格. <Style x:Key="CurrentScanExpanderStyle" TargetType="{x:Type local:ProgressExpander}"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="HorizontalContentAlignment" Value="Stretch"/> <Setter Property="VerticalContentAlignment" Value="Stretch"/> <Setter Property="BorderBrush" Value="Transparent"/> <Setter Property="BorderThickness" Value="1"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:ProgressExpander}"> <Border SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="3"> <DockPanel> <Grid DockPanel.Dock="Top"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <ProgressBar Name="ProgressBar"/> <ToggleButton FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" FontStretch="{TemplateBinding FontStretch}" FontStyle="{TemplateBinding FontStyle}" FontWeight="{TemplateBinding FontWeight}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" FocusVisualStyle="{StaticResource ExpanderHeaderFocusVisual}" Margin="1" MinHeight="0" MinWidth="0" x:Name="HeaderSite" Style="{StaticResource ExpanderDownHeaderStyle}" IsChecked="{Binding Path=IsExpanded,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" Content="{TemplateBinding Header}" ContentTemplate="{TemplateBinding HeaderTemplate}" ContentTemplateSelector="{TemplateBinding HeaderTemplateSelector}"/> </Grid> <ContentPresenter Focusable="false" Visibility="Collapsed" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" x:Name="ExpandSite" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" DockPanel.Dock="Bottom"/> </DockPanel> </Border> <ControlTemplate.Triggers> <!-- Triggers haven't changed from the default --> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> 这工作正常,但我无法绑定控制进度百分比的自定义依赖项属性. public class ProgressExpander : Expander { static ProgressExpander() { DefaultStyleKeyProperty.OverrideMetadata(typeof(ProgressExpander),new FrameworkPropertyMetadata(typeof(ProgressExpander))); } public int Progress { get { return (int)GetValue(ProgressProperty); } set { SetValue(ProgressProperty,value); } } // Using a DependencyProperty as the backing store for Progress. This enables animation,styling,binding,etc... public static readonly DependencyProperty ProgressProperty = DependencyProperty.Register("Progress",typeof(int),typeof(ProgressExpander),new UIPropertyMetadata(0)); } 这是窗口内的代码: <local:ProgressExpander Grid.Row="1" Header="Current Scan" ExpandDirection="Down" x:Name="currentScanExpander" Style="{DynamicResource CurrentScanExpanderStyle}"> <Canvas Background="SkyBlue" Name="currentScanCanvas" Height="{Binding ElementName=currentScanExpander,Path=ActualWidth}" /> </local:ProgressExpander> 我不确定如何将此依赖项属性进度绑定到样式中ProgressBar中的进度值. 任何帮助,将不胜感激. 解决方法
在样式中,我们可以使用标准Binding和RelativeSource来设置属性.
<ProgressBar Name="ProgressBar" Value="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Progress}" Minimum="0" Maximum="100" /> 然后,在窗口中我们只需添加Progress =“50”或绑定到其他地方. 您还需要将Button的背景设置为透明,或者更改某种布局方式,以便查看它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |