2015-09-07 55 views
0

我已經創建了一個從WPF文本框繼承的自定義控件。在不丟失經典行爲的情況下更改文本框模板

我的控制模板只是簡單地在文本框中添加一個小按鈕,以便更快地刪除它的文本。

但是,我注意到,當我的文本框獲得焦點時,其邊框不會像經典文本框那樣更改(藍色)。

我會保存原始文本框的所有方面,就像控件獲得焦點時的邊框一樣。

我錯過了什麼嗎?

@@編輯

<TextBox x:Class="XTextBox.WKTextBox" 
     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" 
     mc:Ignorable="d" 
     Height="23" Width="200" 
     > 



<TextBox.Resources> 
    <ControlTemplate x:Key="IconButton" TargetType="{x:Type ToggleButton}"> 
     <Border> 
      <ContentPresenter /> 
     </Border> 
    </ControlTemplate> 
</TextBox.Resources> 

<TextBox.Style> 

    <Style TargetType="TextBox"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TextBox}"> 
        <Grid> 
         <Border BorderThickness="1" BorderBrush="DarkGray"> 
          <ScrollViewer x:Name="PART_ContentHost" /> 
         </Border> 
         <ToggleButton Template="{StaticResource IconButton}" 
          MaxHeight="21" 
          Margin="-1,0,0,0" 
          Name="imgButton" 
          Focusable="False" 
          IsChecked="False"> 

          <Image Name="imgClearText" Source="Images\x.png" Stretch="Uniform" Opacity="0.5" Visibility="Visible" HorizontalAlignment="Right" > 
          </Image> 

         </ToggleButton> 

        </Grid> 

       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

</TextBox.Style> 

+0

請添加一些細節並顯示您的修改代碼,以便更容易理解發生了什麼問題。 –

+0

你已經添加了一個邊框被設置爲DarkGray的網格,不會隱藏包含的編輯框邊框嗎? –

+0

編號設置爲DarkGray的邊界似乎不成問題。如果我刪除邊框,我無法看到我的文本框。 – Bit79

回答

0

您可以手動獲得通過添加處理程序邊界的GotFocus &引發LostFocus事件相同的效果,並設置你想要有高亮色彩。

<Border BorderThickness="1" BorderBrush="DarkGray" LostFocus="Border_LostFocus" GotFocus="Border_GotFocus"> 

,並在.cs文件

private void Border_LostFocus(object sender, RoutedEventArgs e) 
{ 
    ((Border)sender).BorderBrush = new SolidColorBrush(Colors.DarkGray); 
} 

private void Border_GotFocus(object sender, RoutedEventArgs e) 
{ 
    ((Border)sender).BorderBrush = new SolidColorBrush(Colors.LightBlue); 
} 
+0

這是一個解決方法,但我不能相同的行爲,既不是經典文本框 – Bit79

+0

相同的顏色我注意到,在鼠標輸入邊框是lightBlue,但在聚焦事件藍色似乎是更深一點。何我可以得到那種顏色? – Bit79

+0

我無法在PC上看到這種效果 – PaulF

1

不幸的是,你可以不鬆動functionallity不是簡單Replace part of default template in WPF。 我相信最簡單的解決方案是donwload Blend(它自帶VS2015)。打開它,創建一個文本框emty和編輯它的模板:

enter image description here

混合將使默認模板的副本,這樣你就不會失去你的任何默認行爲,像選擇,重點等 然後你可以保存一個項目,在VS中打開它並重構它,只要你想。喜歡將風格轉移到字典或其他東西。

相關問題