programing

WPF 단추 텍스트 래핑 스타일

bestprogram 2023. 6. 11. 11:05

WPF 단추 텍스트 래핑 스타일

WPF에서 단추의 기본 텍스트 래핑 스타일을 변경하려면 어떻게 해야 합니까?

다음의 명백한 솔루션:

<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="TextWrapping" Value="Wrap"></Setter>
</Style>

문자 래핑은 여기서 설정 가능한 자산이 아니기 때문에 작동하지 않습니다.

내가 시도하는 경우:

<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <TextBlock Text="{Binding}" Foreground="White" FontSize="20" FontFamily="Global User Interface" TextWrapping="Wrap"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

나는 단지 컴파일러로부터 쓸모없는 응답을 받았을 뿐입니다.

Error   5   After a 'SetterBaseCollection' is in use (sealed), it cannot be modified.   

ControlTemplate 태그를 제거하면 오류가 유지됩니다.

다음 시도는 다른 오류를 발생시킵니다.

    <Setter Property="TextBlock">
        <TextBlock Text="{Binding}" Foreground="White" FontSize="20" FontFamily="Global User Interface" TextWrapping="Wrap"/>
    </Setter>

Error   5   The type 'Setter' does not support direct content.  

버튼별로 개별적으로 문자 포장을 설정할 수 있는 것은 알지만, 그것은 꽤 괜찮은 일입니다.스타일로 어떻게 해야 하나요?마법의 단어는 무엇입니까?

그리고 나중에 참고할 수 있도록, 제가 어디서 이 마법 단어들의 목록을 찾을 수 있을까요? 그래서 저는 이것을 혼자서 할 수 있을까요?설정자가 설정할 수 있는 속성을 찾으려 할 때 MSDN 항목은 꽤 쓸모가 없습니다.

예를 들어 에릭의 대답을 확장하기 위해:-

<Button Name="btnName" Width="50" Height="40">
   <TextBlock Text="Some long text" TextWrapping="Wrap" TextAlignment="Center"/>
</Button>

나는 이 문제를 추가함으로써 해결했습니다.TextBlock단추로, 그리고 단추의 텍스트 대신 단추 텍스트를 표시하기 위해 사용합니다.Content소유물.설정해야 합니다.TextBlock의 높이 속성Auto텍스트 줄 수에 맞게 높이를 조절할 수 있습니다.

두 번째 버전은 텍스트 블록 텍스트 바인딩을 변경해야 한다는 주의 사항과 함께 작동해야 합니다.

<!-- in Window.Resources -->
<Style x:Key="fie" TargetType="Button">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Button}">
        <TextBlock Text="{TemplateBinding Content}" FontSize="20" TextWrapping="Wrap"/>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

<!-- then -->
<Button Style="{StaticResource fie}">verylongcaptiongoeshereandwraps/Button>

버튼 스타일을 완전히 대체합니다. 즉, 원하는 경우 직접 버튼 크롬을 만들어야 합니다.

두 번째 질문과 관련하여 모든 쓰기 가능한 종속성 속성은 세터를 사용하여 설정할 수 있습니다.스타일을 통해 버튼에 TextWraping을 설정할 수 없었던 이유는 버튼에 TextWraping 종속성 속성(또는 실제로는 TextWraping 속성)이 없기 때문입니다."마법의 단어"는 없고 종속성 속성의 이름만 있습니다.

<Style TargetType="Button">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock Text="{TemplateBinding Content}" TextWrapping="Wrap" />
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

다음은 C# 코드백으로 작성된 Eric의 답변 예입니다.

var MyButton = new Button();

MyButton.Content = new TextBlock() {
    FontSize        = 25,
    Text            = "Hello world, I'm a pretty long button!",
    TextAlignment   = TextAlignment.Center,
    TextWrapping    = TextWrapping.Wrap
};

@fadden의 코멘트로 @Rob의 답변을 확장하려면:

<Button Width="50" Height="40">
   <AccessText Text="_Some long text" TextWrapping="Wrap" TextAlignment="Center"/>
</Button>

TextBlock 컨트롤은 키보드 단축키(_)를 지원하지 않습니다.

언급URL : https://stackoverflow.com/questions/754137/wpf-button-textwrap-style