Как использовать IsEnabled, чтобы отключить части Expander, но не все? - PullRequest
3 голосов
/ 19 октября 2011

У меня есть расширитель с пользовательским шаблоном:

<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, мой прокручиватель все еще мог прокручивать (он остается включеннымно другие части моего контроля отключить).Есть ли способ сделать это?

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Если ответ Роберта не работает, вы всегда можете создать AttachedProperty с именем IsContentEnabled и привязать IsEnabled вашего ContentPresenter к этому свойству.

<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 голосов
/ 19 октября 2011

Дайте вашей DockPanel имя. Затем используйте e FindName (см. http://joshsmithonwpf.wordpress.com/2007/06/28/how-to-use-findname-with-a-contentcontrol/), чтобы получить доступ к этой DockPanel во время выполнения. Установите IsEnabled непосредственно на нее, а не на элемент управления Expander более высокого уровня. Сделайте то же самое для ContentPresenter, если необходимо.

...