2013-01-14 2 views
2

작은 아이콘 (png 파일)을 텍스트 상자의 모서리에 넣고 싶습니다. 이 ISN 분명히XAML (WPF)의 텍스트 상자에 아이콘 넣기

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

'무슨 뜻인지의 스케치는 내가

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

내 자원 지역에서 (내 주요 XAML 파일에)있어 지금까지 http://dosketch.com/view.php?k=mIPeHLSBLx0e2YpoVpYO

에있다 t 작업 (텍스트 상자를 처음부터 잃어 버리고 있습니다!). 사용자가 텍스트 상자에 타이핑 할 때 텍스트가 이미지와 겹치지 않는 것이 이상적입니다. 그러나 당분간은 텍스트 상자에서 이미지를 가져 오는 것이 즐겁습니다.

덕분에 당신은 WPF에서 컨트롤의 템플릿을 변경할 때마다

불행하게도

답변

3

을 대신 템플릿을 덮어, 나는 새로운 간단한 UserControl을을 만들 것

<my:MyUserControl Text="{Binding MyText}" IconSource="{Binding MyIcon}"/> 
+0

고마워, 결국 usercontrol 경로 내려 갔다. – theqs1000

0

는, 당신은 단지 그것의 작은 부분을 수정할 수 없습니다, 전체 템플릿을 덮어 쓰기해야 할 것입니다.

다행히도 모든 템플릿은 공개되어 있습니다. 예를 들어 textbox's default template입니다.

그래서, 텍스트 상자에 이미지를 추가 위의 링크에서 전체 텍스트 상자 템플릿을, 그리고 당신이 맞는 볼 때마다 이미지를 추가하기 위해 ... 의견에서 지적

, 당신 은 텍스트 상자의 모든 속성을 덮어 써야하며, 단지 Template 속성 만 사용해야합니다. 이것은 쉽게 BasedOn 속성을 사용하여 수행 할 수 있습니다 : 다음과 같이

//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; 
} 

그래서 당신이 그것을 사용할 수 있습니다 :

<Style x:Key="IconTextBox" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Setter Property="Template"> 
     .... 
    </Setter> 
</Style> 
+0

이 다른 속성에 관해서,의 경우 템플릿을 재정의하는 경우 OP는'BasedOn' 속성을 사용하고 그들 만이 즉 ... 배경 색상 ... –

+0

, 필요 덮어 쓸 수 있습니다 @ AaronMcIver - 정확합니다, 내 대답에 분명하지 않습니다 - 내가 좀 더 명확하게 만들 것입니다 ... – Blachshma

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> 
관련 문제