如何使用IsEnabled来禁用扩展器的某些部分,而不是全部



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

<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的回答不起作用,你可以创建一个名为IsContentEnabledAttachedProperty,并将你的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也做同样的操作。

最新更新