2015-10-23 1 views
0

Я пытаюсь реализовать решение Watermark для своих ComboBoxes, которые я нашел где-то в Интернете (я не могу найти страницу снова), но у меня проблемы со связыванием. Исходное решение имело статический текст, который я хотел бы заменить, используя привязку к свойству Tag ComboBoxes.WPF Binding Style.Trigger To Parent

Это то, что я до сих пор:

<Grid> 
     <Grid.Resources> 
      <VisualBrush x:Key="Watermark" TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left"> 
       <VisualBrush.Visual> 
        <TextBlock FontStyle="Italic" Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=Tag}"/> 
       </VisualBrush.Visual> 
      </VisualBrush> 
      <Style TargetType="ComboBox" BasedOn="{StaticResource {x:Type ComboBox}}"> 
       <Setter Property="Margin" Value="5"/> 
       <Setter Property="IsEditable" Value="False"/> 
       <Setter Property="IsReadOnly" Value="True"/> 
       <Style.Triggers> 
        <Trigger Property="Text" Value=""> 
         <Setter Property="Background" Value="{DynamicResource Watermark}"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Grid.Resources> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 

     <ComboBox Grid.Column="0" ItemsSource="{Binding Categories}" Tag="Categories"/> 
     <ComboBox Grid.Column="1" ItemsSource="{Binding SubCategories}" Tag="SubCategories"/> 
     <ComboBox Grid.Column="2" ItemsSource="{Binding Whatever}" Tag="Whatever"/> 

К сожалению, это выглядит как часть "FindAncestor" не работает. Может ли кто-нибудь сказать мне, почему?

Заранее благодарен!

ответ

0

Боюсь, что это не так просто.

Во-первых, вы не можете установить свойство ComboxBoxBackground, как это. Это становится очевидным, как только вы попытаетесь заменить RelativeSource-Binding на какой-то жесткий код.

Во-вторых, вы должны убедиться, что ресурс VisualBrush является частью VisualTree вашего ComboBox, а не где-то еще (в том числе Grid).

Обе проблемы могут быть решены путем повторного набора ComboBox. Это можно сделать в Blend или Visual Studio, сначала создав новый шаблон (как копию). Тогда вам нужно немного изменить его.

Будет Grid с именем "templateRoot". Добавить водяной знак Ressource:

<Grid x:Name="templateRoot" SnapsToDevicePixels="True"> 
    <Grid.Resources> 
     <VisualBrush x:Key="Watermark" TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left"> 
      <VisualBrush.Visual> 
       <TextBlock FontStyle="Italic" Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=Tag}"/> 
      </VisualBrush.Visual> 
     </VisualBrush> 
    </Grid.Resources> 
    <Grid.ColumnDefinitions>... 

Затем, в конце <ControlTemplate.Triggers> части вам нужно вставить другой MultiDataTrigger:

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding Text, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ComboBox}}}" Value="" /> 
    </MultiDataTrigger.Conditions> 
    <Setter Property="Background" TargetName="templateRoot" Value="{DynamicResource Watermark}"/> 
</MultiDataTrigger> 

Это должно быть MultiTrigger условие, так как в противном случае это не Привязываемое.

+0

Я не понимаю вашу первую точку, потому что если я заменил RelativeSource-Binding на какой-то жесткий код, это сработает ...? – MemphiZ

+0

Для меня это не так. Если это имеет значение, вы должны опубликовать полный образец для демонстрации. – JeffRSon

+0

lol теперь это смешно. Я создал образец проекта, который не показывал водяной знак. После того, как я добавил пакет MahApps.Metro nuget и скорректировал стили в App.xaml, он работает. Они должны каким-то образом реализовать это поведение. К сожалению, я все еще не могу сопоставить свойство Binding to the Tag из ComboBoxes. В любом случае вы можете найти решение здесь: https://www.dropbox.com/s/eb219vbqdo2co45/WpfApplication1.7z?dl=1 – MemphiZ

 Смежные вопросы

  • Нет связанных вопросов^_^