【问题标题】:How to use the IsEnabled to disable the parts of an Expander, but not the whole thing?如何使用 IsEnabled 禁用 Expander 的一部分,而不是全部?
【发布时间】:2011-10-19 13:27:31
【问题描述】:

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

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

【问题讨论】:

    标签: wpf xaml styles scrollviewer expander


    【解决方案1】:

    如果 Robert's answer 不起作用,您始终可以创建一个名为 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>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-22
        • 1970-01-01
        • 2012-02-26
        • 1970-01-01
        相关资源
        最近更新 更多