問題の背景を短くしてください:ResourceDictionaryにパックされたxamlのみのTextBoxプレースホルダを作成しようとしています。この時点でTextBoxの名前をプレースホルダにバインドする
- 私が見て、このようなページで使用されても動作するプロトタイプ、作られています:サーチを保持しているグリッドは、3つの要素から構成さ
<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>
を:
- TextBox - 検索文字列を受け取ります。
- TextBlock - 実際にPlaceHolderを保持します。 TextBoxのElementNameが空の文字列でないとすぐに消滅します。
- 画像 - 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>
主な障害私は何を達成したいことはページ上でこのような外観です
私は実際にどのように動作するのか理解していないので、バインディングがあります。この時点で、3つの要素が同じ名前プロパティを共有する必要があります(これはかなり大きな障害です) 。
私は正確にこの構成に固執していませんが、私はそれが再利用可能で、コミュニティにとって有用で見栄えのよいものであることを望みます。
をうまく動作するプロトタイプを持っている場合は、それらの結合の問題は何ですか? – lokusking
非常に妥当な質問ですが、記述されたバインディングが間違っていることがあります。私はさまざまな組み合わせやアプローチを試みましたが、2つのうちの1つが起こります。プロジェクトがビルドされず、名前に関連する競合エラーが発生するか、プレースホルダが表示されません。 –
ああ、もう1つ:私はすべてのスタイルでそれをパックする私の欲望の理由は、私は同じページで複数の検索ボックスを使用するという事実です。だから私は毎回このスパゲッティを使うことはできません。 –