Краткая информация о проблеме: Я пытаюсь сделать читаемый, только для Xaml TextBox Placeholder, который упакован в ResourceDictionary.Binding TexBox Name to TextBlock Name, Placeholder
На данный момент - я сделал хорошо работающий прототип, который выглядит и используется на странице, как это:
<Grid>
<TextBox Style="{StaticResource SearchBox}"
Width="325"
x:Name="UsarioDisponiblesSearch"/>
<TextBlock IsHitTestVisible="False"
Text="Search..."
VerticalAlignment="Center"
HorizontalAlignment="Left"
Margin="5,0,0,0"
Foreground="{StaticResource WhiteFadedBrush}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Text, ElementName=UsarioDisponiblesSearch}" Value="">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<Image Source="/img/search.png" Height="15" HorizontalAlignment="Right" Margin="0,0,5,0" />
</Grid>
Grid, который держит SearchBox состоят из 3-х элементов:
- TextBox - который получит строку поиска;
- TextBlock - который фактически содержит PlaceHolder. Он исчезает, как только ElementName из TextBox не является пустой строкой;
- Изображение - пользовательский значок справа от SearchBox.
То, что я хочу достичь, это взгляд, как это на странице:
<Grid>
<TextBox Style="{StaticResource SearchBox}"
Width="325"
x:Name="UarioDisponiblesSearch"/>
<TextBlock Style="{StaticResource PlaceHolder}"
x:Name="{Binding Text, ElementName=UarioDisponiblesSearch}" />
</Grid>
И как вокруг этого стиля, описанного в ResourceDictionary:
<Style x:Key="SearchBox" TargetType="{x:Type TextBox}">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="Margin" Value="5,0,0,0" />
<Setter Property="Foreground" Value="{StaticResource WhiteBrush}" />
</Style>
<Style x:Key="Placeholder" TargetType="{x:Type TextBlock}">
<Setter Property="IsHitTestVisible" Value="False" />
<Setter Property="Text" Value="Search..." />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="Margin" Value="5,0,0,0" />
<Setter Property="Foreground" Value="{StaticResource WhiteFadedBrush}" />
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
Основным препятствием на моем так как я не очень хорошо понимаю, как это работает, и тот факт, что в этот момент три элемента должны будут иметь одно и то же свойство Name (что, я полагаю, тоже довольно большое препятствие) ,
Я не придерживаюсь именно этой конструкции, но хочу, чтобы она была многоразовой, полезной для сообщества и аккуратного взгляда.
Если есть хорошо работающий прототип, то, что те Binding-проблемы? – lokusking
Очень разумный вопрос, дело в том, что описанные привязки неверны. Я пробовал разные комбинации и подходы, но одна из двух вещей случается: или проект не строится и возникает ошибка конфликта, связанная с именем, или не отображается показатель. –
О, и еще одно: причина моего желания собрать все в стиле - это тот факт, что я буду использовать несколько SearchBoxes на одной странице. Поэтому я не могу позволить себе использовать эти спагетти каждый раз. –