2

テキストボックスの隅に小さなアイコン(pngファイル)を配置したいと思います。私が言っていることのスケッチはhttp://dosketch.com/view.php?k=mIPeHLSBLx0e2YpoVpYOにあります

これまでのところ、(メインのxamlファイルに)あります

<TextBox Style="{StaticResource IconTextBox"} ...

と私のリソース領域で:

<Style x:Key="IconTextBox" TargetType="TextBox">
 <Setter Property="Template">
  <Setter.Value>
   <ControlTemplate TargetType="TextBox">
     <Image Source="icon.png" />
   </ControlTemplate>
  </Setter.Value>
 </Setter>
</Style>

明らかにこれは機能していません(最初はテキストボックスを失っています!)。理想的には、ユーザーがテキストボックスに入力しているときに、テキストが画像と重ならないようにします。ただし、当面は、テキストボックスに画像を表示できれば幸いです。

ありがとう

4

3 に答える 3

3

テンプレートを上書きする代わりに、新しい単純な UserControl を作成します。

//pseudocode, does not compile!
<UserControl x:Class="MyUserControl" x:Name="root">
    <Grid>
        <!-- put some effort in aligning the items so it looks nice -->
        <TextBox Text="{Binding ElementName=root, Path=Text}" />
        <Image Source="{Binding ElementName=root, Path=IconSource}" />
    </Grid>
</UserControl>

public class MyUserControl : UserControl{
    dependencyproperty string Text;
    dependencyproperty string IconSource;
}

したがって、次のように使用できます。

<my:MyUserControl Text="{Binding MyText}" IconSource="{Binding MyIcon}"/>
于 2013-01-14T14:50:48.113 に答える
0

残念ながら、WPFでコントロールのテンプレートを変更する場合は常に、テンプレート全体を上書きする必要があり、その一部だけを変更することはできません。

幸いなことに、すべてのテンプレートが公開されています。たとえば、これはテキストボックスのデフォルトのテンプレートです。

したがって、テキストボックスに画像を追加するには、上のリンクからテキストボックステンプレート全体を取得し、適切と思われる場所に画像を追加します...

コメントで指摘されているように、テキストボックスのすべてのプロパティを上書きする必要はなくTemplate、プロパティだけを上書きする必要があります。BasedOnこれは、次の属性を使用して簡単に実行できます。

<Style x:Key="IconTextBox" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
   <Setter Property="Template">
       ....
   </Setter>
</Style>
于 2013-01-14T14:13:00.830 に答える
0

実際には、作成したいテキストボックススタイルにテキストボックスを追加することもできますが、これは実際にはソースを変更できる画像を提供しませんが、xamlにハードコードされるため、作成できると思いますその情報を渡すための添付プロパティ。

とにかく、これの重要な部分は、テキスト ボックスのスタイル内でテキスト ボックスを使用する場合は、内部のテキスト ボックス スタイルを {x:null} に設定する必要があるということです。

        <Style TargetType="TextBox">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="TextBox">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="50"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Style="{x:Null}" Grid.Column="0" 
                                       Text="{TemplateBinding Text}"
                                       Foreground="{TemplateBinding Foreground}"                                           
                                       Background="{TemplateBinding Background}" 
                                       FontFamily="{TemplateBinding FontFamily}"
                                       FontSize="{TemplateBinding FontSize}"
                                       FontWeight="{TemplateBinding FontWeight}"/>

                            <Image Grid.Column="1" Source=">Insert your image source here."/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
于 2013-01-14T16:11:08.313 に答える