2014-10-09 40 views
1

我有一個包含下面的代碼資源字典:日期選擇器繼承風格從文字塊

<Style TargetType="{x:Type TextBlock}" > 
    <Setter Property="FontSize" Value="20"/> 
</Style> 

在我的App.xaml,我在全球範圍進行合併:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Theme/Default.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

的問題是,文本DatePicker中的「選擇日期」受TextBlock樣式的影響,增加了Datepicker的總高度(僅在運行時;在設計中它看起來很好)。

當您開始輸入日期(或使用日曆選擇一個日期)時,它不會從TextBlock樣式繼承。問題只是文本「選擇日期」。

我不想爲我的應用程序中的每個文本塊設置一個鍵。

我該如何解決這個問題?

編輯

望着MSDN文檔更近,我們可以看到一個TextBox控件的文本顯示FrameworkElement的內部,而不是一個TextBlock。

http://msdn.microsoft.com/en-us/library/ms752068%28v=vs.110%29.aspx

而且DatePicker的有它顯示爲一個TextBox值。但文本「選擇日期」似乎是TextBox上的TextBlock。

EDIT 2

我可以訪問文本框模板的DatePicker內:通過查看風格

http://msdn.microsoft.com/en-us/library/ff468215%28v=vs.110%29.aspx

但沒有對文本塊...

+0

你可以在DatePicker文本框中設置FontSize的樣式嗎? – 2014-10-09 02:21:57

+0

直接在DatePicker中設置FontSize =「5」只會改變輸入的日期,而不會改變有問題的「選擇日期」文本 – Guilherme 2014-10-09 02:23:49

回答

0

你是正確的datepicker控件,你將無法找到您的文本塊選擇日期。因爲這是日期選擇器控件中文本框的水印值。您將需要在此日期選擇器中編輯此文本框的樣式。

在datepicker控件中使用的文本框是DatepickerTextbox。您將需要修改此文本框的樣式。這通過使用表達式混合非常簡單。

<Style x:Key="DatePickerTextBoxStyle1" TargetType="{x:Type DatePickerTextBox}"> 
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/> 
      <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> 
      <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/> 
      <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type DatePickerTextBox}"> 
         <Grid> 
          <Grid.Resources> 
           <SolidColorBrush x:Key="WatermarkBrush" Color="#FFAAAAAA"/> 
          </Grid.Resources> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
            <VisualStateGroup.Transitions> 
             <VisualTransition GeneratedDuration="0"/> 
             <VisualTransition GeneratedDuration="0:0:0.1" To="MouseOver"/> 
            </VisualStateGroup.Transitions> 
            <VisualState x:Name="Normal"/> 
            <VisualState x:Name="MouseOver"> 
             <Storyboard> 
              <ColorAnimation Duration="0" To="#FF99C1E2" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="ContentElement"/> 
              <ColorAnimation Duration="0" To="#FF99C1E2" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="watermark_decorator"/> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="WatermarkStates"> 
            <VisualStateGroup.Transitions> 
             <VisualTransition GeneratedDuration="0"/> 
            </VisualStateGroup.Transitions> 
            <VisualState x:Name="Unwatermarked"/> 
            <VisualState x:Name="Watermarked"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ContentElement"/> 
              <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="PART_Watermark"/> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="FocusStates"> 
            <VisualStateGroup.Transitions> 
             <VisualTransition GeneratedDuration="0"/> 
            </VisualStateGroup.Transitions> 
            <VisualState x:Name="Unfocused"/> 
            <VisualState x:Name="Focused"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisual"/> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="1" Opacity="1" Padding="{TemplateBinding Padding}"> 
           <Grid x:Name="WatermarkContent" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
            <Border x:Name="ContentElement" BorderBrush="#FFFFFFFF" BorderThickness="1"/> 
            <Border x:Name="watermark_decorator" BorderBrush="#FFFFFFFF" BorderThickness="1"> 
             <ContentControl x:Name="PART_Watermark" Focusable="False" IsHitTestVisible="False" Opacity="0" Padding="2"/> 
            </Border> 
            <ScrollViewer x:Name="PART_ContentHost" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="0" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> 
            <Border x:Name="FocusVisual" BorderBrush="#FF45D6FA" CornerRadius="1" IsHitTestVisible="False" Opacity="0"/> 
           </Grid> 
          </Border> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

您將需要修改上述樣式中Content控件的樣式PART_Watermark控件。通過修改這種風格它將解決你的問題。

+0

如何將此樣式綁定到我的日期選擇器中? – 2017-06-20 07:11:27