如何使用IsEnabled来禁用Expander的各个部分,而不是整个部分?

时间:2011-10-19 13:27:31

标签: wpf xaml styles scrollviewer expander

我有一个带有自定义模板的扩展器:

<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仍然可以滚动(它保持启用状态,但我的控件的其他部分禁用)。有办法吗?

2 个答案:

答案 0 :(得分:3)

如果Robert's answer不起作用,您可以随时创建一个名为AttachedProperty的{​​{1}},并将您的ContentPresenter的IsEnabled绑定到该属性。

IsContentEnabled

答案 1 :(得分:2)

为您的DockPanel命名。然后使用e FindName(请参阅http://joshsmithonwpf.wordpress.com/2007/06/28/how-to-use-findname-with-a-contentcontrol/)在运行时获取该DockPanel。直接设置IsEnabled而不是更高级别的Expander控件。如果合适,请为您的ContentPresenter执行相同的操作。