2015-06-05 87 views
5

我有一個小問題,我似乎無法正確使用。 我有一個文本框,在那裏我加入「搜索提示」VisualBrush中文本框的綁定寬度

enter image description here

我使用這個代碼片段XAML

<TextBox x:Name="txtboxSearch" Height="22" Margin="3,35,111,0" TextWrapping="Wrap" VerticalAlignment="Top" BorderThickness="1" MaxLines="1" MaxLength="256" Grid.Column="2" BorderBrush="#FF828790"> 
     <TextBox.Style> 
      <Style TargetType="TextBox" xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
       <Style.Resources> 
        <VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None"> 
         <VisualBrush.Visual> 
          <TextBox Text="Search" Foreground="LightGray" FontStyle="Italic" /> 
         </VisualBrush.Visual> 
        </VisualBrush> 
       </Style.Resources> 
       <Style.Triggers> 
        <Trigger Property="Text" Value="{x:Static sys:String.Empty}"> 
         <Setter Property="Background" Value="{StaticResource CueBannerBrush}" /> 
        </Trigger> 
        <Trigger Property="Text" Value="{x:Null}"> 
         <Setter Property="Background" Value="{StaticResource CueBannerBrush}" /> 
        </Trigger> 
        <Trigger Property="IsKeyboardFocused" Value="True"> 
         <Setter Property="Background" Value="White" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TextBox.Style> 
    </TextBox> 

因爲窗口的背景不是白色,我得到一個結果如圖所示。我試圖綁定寬度多種不同的方式,但似乎沒有工作,你能建議嗎?

我希望它看起來像這樣 enter image description here

謝謝!

+0

究竟是什麼你想實現什麼? –

+0

visualbrush中的文本框的寬度與「textboxsearch」的寬度相同 – Dude

回答

2

執行此操作的方法是將CueBannerBrush(您的VisualBrush)中的TextBox寬度綁定到主TextBox父級(txtboxSearch)。

<Window.Resources> 
    <VisualBrush x:Key="CueBannerBrush" TileMode="Tile" Stretch="None" AlignmentX="Left" AlignmentY="Center" > 
     <VisualBrush.Visual> 
      <TextBox 
        Width="{Binding ElementName=txtboxSearch, Path=ActualWidth}" 
        HorizontalAlignment="Stretch" x:Name="txtboxWatermark" Text="Search" Foreground="LightGray" FontStyle="Italic"/> 
     </VisualBrush.Visual> 
    </VisualBrush> 
</Window.Resources> 

然後你的主要XAML是一樣的,但沒有:

但是,如果您將CueBannerBrush定義到控制或窗口的資源,而不是在TextBox.Style資源這僅適用VisualBrush定義。

<Grid Background="Tomato"> 
    <TextBox x:Name="txtboxSearch" Height="22" Margin="3,35,111,0" TextWrapping="Wrap" VerticalAlignment="Top" BorderThickness="1" 
      MaxLines="1" MaxLength="256" Grid.Column="2" BorderBrush="#FF828790"> 
     <TextBox.Style> 
      <Style TargetType="TextBox"> 
       <Style.Triggers> 
        <Trigger Property="Text" Value="{x:Static sys:String.Empty}"> 
         <Setter Property="Background" Value="{StaticResource CueBannerBrush}" />        
        </Trigger> 
        <Trigger Property="Text" Value="{x:Null}"> 
         <Setter Property="Background" Value="{StaticResource CueBannerBrush}" /> 
        </Trigger> 
        <Trigger Property="IsKeyboardFocused" Value="True"> 
         <Setter Property="Background" Value="White" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TextBox.Style> 
    </TextBox> 
</Grid> 

現在,你會開始看到這一點: :

當你點擊它裏面: :

+0

太棒了!謝謝 – Dude