我有一个扩展器与自定义模板:
<ControlTemplate TargetType="{x:Type Expander}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Grid.Row="0">
<DockPanel>
<ToggleButton DockPanel.Dock="Right" Template="{DynamicResource ExpanderToggle}" />
<ContentPresenter DockPanel.Dock="Right" ContentSource="Tag" />
<ContentPresenter DockPanel.Dock="Left" ContentSource="Header">
</DockPanel>
</Border>
<Border Visibility="Collapsed" Grid.Row="1">
<ScrollViewer IsEnabled="True">
<ContentPresenter IsEnabled="{TemplateBinding IsEnabled}" />
</ScrollViewer>
</Border>
</Grid>
</ControlTemplate>
基本上,我试图使它,如果我设置IsEnabled属性为false,我的scrollviewer仍然可以滚动(它保持启用,但我的控制的其他部分禁用)。有办法吗?
如果Robert的回答不起作用,你可以创建一个名为IsContentEnabled
的AttachedProperty
,并将你的ContentPresenter的IsEnabled绑定到该属性。
<Expander local:IsContentEnabled="False" />
<ControlTemplate TargetType="{x:Type Expander}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Grid.Row="0">
<DockPanel>
<ToggleButton DockPanel.Dock="Right" Template="{DynamicResource ExpanderToggle}" />
<ContentPresenter DockPanel.Dock="Right" ContentSource="Tag" />
<ContentPresenter DockPanel.Dock="Left" ContentSource="Header">
</DockPanel>
</Border>
<Border Visibility="Collapsed" Grid.Row="1">
<ScrollViewer>
<ContentPresenter IsEnabled="{TemplateBinding local:IsContentEnabled}" />
</ScrollViewer>
</Border>
</Grid>
</ControlTemplate>
给你的DockPanel一个名字。然后使用FindName(参见http://joshsmithonwpf.wordpress.com/2007/06/28/how-to-use-findname-with-a-contentcontrol/)在运行时获取DockPanel。直接在其上设置IsEnabled,而不是在更高级别的Expander控件上设置IsEnabled。如果合适的话,对ContentPresenter也做同样的操作。