У меня есть следующий код для размещения "WaterMark"
TextBlock
на любом wpf
управления:Создание водяного знака шаблонного texblock МОФ
<TextBlock Text="Some Text" IsHitTestVisible="False" Foreground="Gray" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="Normal">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=FromFrameComboBox, Path=SelectedItem}" Value="{x:Null}">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
В целях предотвращения дублирования этих строк для каждого элемента управления, я хочу bind
это TextBlock
, я хотите создать UserControl
от него и использовать его как это:
<ComboBox x:Name="FromFrameComboBox" Grid.Row="0" Grid.Column="1" ItemsSource="{Binding OrDataContainers.ObjectsCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalContentAlignment="Center"
VerticalContentAlignment="Center" VerticalAlignment="Center" SelectedItem="{Binding OrDataContainers.SelectedObject, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="0,5,0,0"/>
<Wpf:WatermarkTextBlock x:Name="FromFrameComboBoxText" Text="Select Frame Number" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
(я поместил TextBlock
определение в включаемый dll
файла, и это выглядит следующим образом:
<TextBlock x:Class="Wpf.WatermarkTextBlock" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
IsHitTestVisible="False" Foreground="Gray" FontWeight="Normal">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=AvailableFrames, Path=SelectedItem}" Value="{x:Null}">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
Дело в том, что DataTrigger
является переплетен с контролем я в настоящее время, в приложении я разрабатываю: AvailableFrames, и если я хотел бы повторно использовать это dll
в другом приложении, мне нужно будет изменить привязку DataTrigger
.
Можно ли это сделать?
Благодаря Гоши! Чтобы сообщить вам, что привязка должна быть в 'SelectedItem' и что возвращаемые значения внутри функции Convert должны быть противоположными, возвращайте« Visible », если заданное значение равно NULL. Еще раз спасибо! – Idanis
исправлено, не зря :) – igorushi