DatePicker日历填满整个屏幕

时间:2015-07-30 15:49:27

标签: c# wpf xaml datepicker

我的应用程序中有一个DatePicker,DockPanels位于StackPanel ScrollViewer中的UserControl

UserControl的(简化)xaml如下所示:

<UserControl x:Class="project.UI1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xml:lang="de-DE"
             mc:Ignorable="d" >
    <UserControl.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Width" Value="250"/>
            <Setter Property="TextWrapping" Value="Wrap"/>
            <Setter Property="TextAlignment" Value="Right"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="Margin" Value="2"/>
            <Setter Property="Padding" Value="3"/>
        </Style>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="DockPanel.Dock" Value="Top"/>
            <Setter Property="TextWrapping" Value="Wrap"/>
            <Setter Property="MaxWidth" Value="{Binding RelativeSource={RelativeSource AncestorType=Border},Path=ActualWidth}"/>
            <Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
        </Style>
        <Style TargetType="{x:Type DatePicker}">
            <Setter Property="Margin" Value="2"/>
            <Setter Property="Width" Value="105"/>
            <Setter Property="MaxWidth" Value="105"/>
            <Setter Property="Height" Value="24"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="HorizontalAlignment" Value="Left"/>
        </Style>
        <Style TargetType="{x:Type DockPanel}">
            <Setter Property="DockPanel.Dock" Value="Top"/>
        </Style>
        <Style TargetType="{x:Type Border}">
            <Setter Property="Margin" Value="0"/>
            <Setter Property="Padding" Value="2"/>
        </Style>
        <Style TargetType="{x:Type ScrollViewer}">
            <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/>
            <Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
        </Style>
    </UserControl.Resources>
    <ScrollViewer>
        <StackPanel>
            <DockPanel>
                <TextBlock Text="IK-Nummer des Absenders (z.B. D-Arzt)"/>
                <Border>
                    <TextBox Text="{Binding p_1}"/>
                </Border>
            </DockPanel>
            <DockPanel>
                <TextBlock Text="IK-Nummer der UNI-DAV aus UV-Träger-Verzeichnis"/>
                <Border>
                    <TextBox Text="{Binding p_2}" />
                </Border>
            </DockPanel>
            <DockPanel>
                <TextBlock Text="Datum der Erstellung durch den Leistungserbringer"/>
                <DatePicker SelectedDate="{Binding p_3}"/>
            </DockPanel>
        </StackPanel>
    </ScrollViewer>
</UserControl>

TextBlocks具有250px的固定宽度并保留字段的描述,而用户输入的TextBoxes应该增长&amp;当用户调整窗口大小时,动态缩小,以适应窗口宽度的其余部分。
这就是为什么我想出了TextBlock中每TextBox / DockPanel - 组合打包的原因。 },并将它们堆叠在StackPanel

然而,当我点击DatePicker时,整个屏幕上的日历超出了范围:

enter image description here

虽然这看起来非常时髦,但我更愿意让普通的方形日历“弹出”。

不幸的是,我不知道是什么原因导致日历像这样疯狂......

1 个答案:

答案 0 :(得分:2)

问题是你的TextBlock风格。它正在应用于DateTimePicker,因为它没有键,因此适用于可视树下的所有TextBlock。

您可以为该样式指定一个键并仅将其应用于某些TextBlocks吗?

<Style TargetType="{x:Type TextBlock}" x:Key="TextBlockStyle">
    <Setter Property="Width" Value="250"/>
    <Setter Property="TextWrapping" Value="Wrap"/>
    <Setter Property="TextAlignment" Value="Right"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="Margin" Value="2"/>
    <Setter Property="Padding" Value="3"/>
</Style>

...

<TextBlock Text="IK-Nummer der UNI-DAV aus UV-Träger-Verzeichnis"
           Style="{StaticResource TextBlockStyle}"/>

<强>更新

或者,您可以在DatePicker的资源中添加一个新的TextBlock样式,以覆盖可视树中更高的样式:

<DatePicker SelectedDate="{Binding p_3}">
    <DatePicker.Resources>
        <Style TargetType="{x:Type TextBlock}"/>
    </DatePicker.Resources>
</DatePicker>