DatePickerTextBox белый фон при отключении - PullRequest
0 голосов
/ 07 марта 2012

Вот мой стиль для WPF DatePicker:

<Style TargetType="{x:Type DatePickerTextBox}">
    <Setter Property="Padding" Value="1" />
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="AllowDrop" Value="true"/>
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
    <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DatePickerTextBox}">
                <Border
                    x:Name="brdBackground"
                    Padding="{TemplateBinding Padding}"
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
                    <ScrollViewer
                        x:Name="PART_ContentHost"
                        Foreground="{TemplateBinding Foreground}"
                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="brdBackground" Property="Opacity" Value="0.5" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style TargetType="{x:Type DatePicker}">
    <Setter Property="Margin" Value="6" />
    <Setter Property="Background" Value="#858ca0" />
    <Setter Property="BorderBrush" Value="#303e66" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="Foreground" Value="Black" />
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Opacity" Value="0.5" />
        </Trigger>
    </Style.Triggers>
</Style>

Когда DatePicker включен, он выглядит именно так, как я хочу:

http://imageshack.us/photo/my-images/819/enabled.jpg/

Однако, когда DatePicker отключен, фон DatePickerTextBox, содержащийся в нем, становится белым:

http://imageshack.us/photo/my-images/832/disableda.jpg/

Я не хочу, чтобы DatePickerTextBox изменялся в любом случае, когда DatePicker отключается. Непрозрачность DatePicker устанавливается равной 0,5, когда его свойство IsEnabled имеет значение false, и это все, чего я хочу добиться. Учитывая, что я использую шаблон элемента управления и переопределяю стиль по умолчанию для DatePickerTextBox, я начинаю думать, что на самом деле это не DatePickerTextBox, который устанавливается в белый цвет, а что-то другое. Любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 07 марта 2012

он не становится белым, на самом деле он становится полупрозрачным белым (A5FFFFFF): -)

источник: http://msdn.microsoft.com/en-us/library/ff468215.aspx

теперь это ваш случай, шаблон, который вы копируете / вставляетеэто не тот из вашего DatePicker, это фактически тот из DatePickerTextBox, который он содержит.Но серая там не делается, это делается в самом DatePicker, а именно здесь:

<VisualState x:Name="Disabled">
    <Storyboard>
        <DoubleAnimation Duration="0"
                         To="1"
                         Storyboard.TargetProperty="Opacity"
                         Storyboard.TargetName="PART_DisabledVisual" />
    </Storyboard>
</VisualState>

, чтобы предотвратить это, вы должны отредактировать шаблон DatePicker и изменить одно из следующих:

  • либо цвет фона элемента PART_DisabledVisual для Прозрачный
  • , либо удалите StoryBoard, показанный в коде выше, из шаблона в целом.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...