2017-07-12 187 views
0

我嘗試在我的想法中設計一個wpf datepicker,但在取消激活內部邊框時遇到了一些麻煩。 當我將鼠標懸停在日期選擇器上或單擊它時,輸入區域周圍會出現淺藍色邊框。你可以在截圖中清楚地看到它。 我如何關閉此邊框?WPF DatePicker內邊框關閉

enter image description here

+1

嘗試使用混合提取風格對於Visual Studio。並採取什麼風格在那裏掠奪,並嘗試禁用邊界或給他們一個不同的顏色。這也可能是一個Chrome風格的硬件。 –

+0

不幸的是,由於我的工作環境,我必須使用Visual Studio Express。據我瞭解,不可能在明示下使用混合物? –

+0

我發現如何提取到沒有混合的風格。只是按照以下線程:https://stackoverflow.com/questions/8825030/how-to-extract-default-control-template-in-visual-studio –

回答

1

覆蓋了DatePickerTextBox的模板,並刪除可視狀態轉換,使藍色邊框出現:

<DatePicker> 
    <DatePicker.Resources> 
     <Style TargetType="DatePickerTextBox"> 
      <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" /> 
           </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" /> 
           </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}"/> 
           </Grid> 
          </Border> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </DatePicker.Resources> 
</DatePicker> 

而且沒有,有沒有更簡單的方法:)

+0

就是這樣。我認爲瘋狂和不直觀。 但它的工作。非常感謝! 我會嘗試將其放入靜態資源以保持xaml清潔程序 –

0

您可以修改默認的DatePicker控件模板給控制獨特的外觀。有關更多信息,請參閱DatePicker Styles and Templates

+0

正如我理解的正確,我想擺脫藍色邊框是datepickertextbox的一部分。所以我在默認樣式中添加了一個BorderBrush到這個標籤。這隻會設置文本框周圍的邊框,因爲它是 –