2014-11-21 2 views
1

Blend에서는 연설 거품 모양의 경로를 만들었습니다. TextBox 또는 TextBlock에 대한 스타일이나 서식 파일로이 경로를 사용하고 싶습니다.이 옵션은 항상 읽기 전용 텍스트로 사용되므로 신경 쓰지 않아도됩니다. 내 스타일이나 템플릿을 만들기 위해 TextBox 또는 TextBlock에 경로를 적용하려면 어떻게해야합니까?WPF : TextBox 템플릿에 경로 적용

경로 XAML :

<Path Data="M27.499998,2.5 L218,2.5 C231.80711,2.5000005 243,13.692882 243,27.500002 L243,114.5 C243,128.30711 231.80711,139.5 218,139.5 L176.86046,139.5 176.77534,140.60143 C173.04614,179.27731 126.53165,183.52524 126.53165,183.52524 143.526,165.98947 145.27682,147.30386 145.22961,139.96802 L145.222,139.5 27.499998,139.5 C13.692882,139.5 2.5,128.30711 2.5,114.5 L2.5,27.500002 C2.5,13.692882 13.692882,2.5000005 27.499998,2.5 z" 
     Fill="#FF5E9E5B" 
     HorizontalAlignment="Left" 
     Height="186.025" 
     Stretch="Fill" 
     Stroke="Black" 
     StrokeThickness="5" 
     VerticalAlignment="Top" 
     Width="245.5" /> 

해결책 : 누군가가 여기,이 건너 오는 경우 (크리스 W. 답변 덕분에)

내가 텍스트 상자 연설을 만들 수있는 솔루션을 구현하는 방법이다 콘텐츠에 자동 크기 조정 거품 StylesDictionary.xaml에서

:

<Style x:Key="SpeechBubbleTextBoxStyle" TargetType="{x:Type ContentControl}"> 
    <Setter Property="IsTabStop" Value="False" /> 
    <Setter Property="HorizontalContentAlignment" Value="Left" /> 
    <Setter Property="VerticalContentAlignment" Value="Top" /> 
    <Setter Property="Margin" Value="10" /> 
    <!-- Add additional Setters Here --> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ContentControl}"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition /> 
         <RowDefinition /> 
        </Grid.RowDefinitions> 
        <TextBox Text="{TemplateBinding Content}" 
          VerticalAlignment="Top" 
          HorizontalAlignment="Stretch" 
          Padding="10" 
          TextWrapping="Wrap" 
          BorderBrush="Black" 
          BorderThickness="2" 
          Background="#FF5E9E5B" 
          Grid.Row="0"> 
         <TextBox.Resources> 
          <Style TargetType="{x:Type Border}"> 
           <Setter Property="CornerRadius" Value="15" /> 
           <Setter Property="BorderBrush" Value="Black" /> 
           <Setter Property="BorderThickness" Value="3" />            
          </Style> 
         </TextBox.Resources> 
        </TextBox> 
        <Path Data="M332,212.5 C332,250.00012 294.00041,254.50014 294.00041,254.50014 312.91688,228.75005 308.39508,212.54091 308.39508,212.54091" 
          Fill="#FF5E9E5B" 
          HorizontalAlignment="right" 
          VerticalAlignment="Top" 
          Height="34" 
          Width="43" 
          Margin="0,-3,50,0" 
          Stretch="Fill" 
          Stroke="Black" 
          StrokeThickness="2" 
          UseLayoutRounding="True" 
          Grid.Row="1"/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

그런 다음 내 UserControl을에서 나는 다음과 같이 호출 :

<ContentControl Style="{StaticResource SpeechBubbleTextBoxStyle}" 
        Content="{Binding InstructionsText}" />  

결과는 다음과 같습니다

Speech Bubble Text Box

+1

'TextBlock'에 대한 템플릿을 만들 수 없지만 둘 모두를'Grid'에 배치하여'Path'의 맨 위에'TextBlock'을 넣을 수 있습니다. – dkozl

답변

1

이 경우, 나는 단지 템플릿과 같은 것을 집어 넣었습니다.

<Window.Resources> 
    <Style x:Key="ChatBubbleThingy" TargetType="{x:Type ContentControl}"> 
     <Setter Property="IsTabStop" Value="False"/> 
     <Setter Property="HorizontalContentAlignment" Value="Center"/> 
     <Setter Property="VerticalContentAlignment" Value="Center"/> 
     <Setter Property="Padding" Value="10"/> 
      <!-- Add additional Setters Here --> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ContentControl}"> 
        <Grid> 
         <Path Data="M27.499998,2.5 L218,2.5 C231.80711,2.5000005 243,13.692882 243,27.500002 L243,114.5 C243,128.30711 231.80711,139.5 218,139.5 L176.86046,139.5 176.77534,140.60143 C173.04614,179.27731 126.53165,183.52524 126.53165,183.52524 143.526,165.98947 145.27682,147.30386 145.22961,139.96802 L145.222,139.5 27.499998,139.5 C13.692882,139.5 2.5,128.30711 2.5,114.5 L2.5,27.500002 C2.5,13.692882 13.692882,2.5000005 27.499998,2.5 z" 
           Fill="#FF5E9E5B" 
           Height="186.025" 
           Stretch="Fill" 
           Stroke="Black" 
           StrokeThickness="5" 
           Width="245.5" /> 
         <TextBlock Text="{TemplateBinding Content}" 
            Margin="{TemplateBinding Padding}" 
            VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/> 
        </Grid>        
       </ControlTemplate> 
      </Setter.Value> 
     </Setter>      
    </Style> 
</Window.Resources> 

다음과 같이 호출하십시오.

<ContentControl Style="{StaticResource ChatBubbleThingy}" 
       Content="Blah Blah Blah Blah"/> 

원하는대로 정확하게 나타나려면 약간 조정해야하지만 아이디어를 얻으십시오. 희망이 도움이, 환호.

P. - TextBox 템플릿이나 너무 쉽게 던지기를 원한다면.

+0

감사합니다. – BrianKE