WPF TextBox 워 터 마크 효과 제작 방법 상세 설명
원래 간단하게 워 터 마크 효 과 를 만 들 려 고 했 는데 텍스트 상자 의 내용 이 비어 있 을 때 사용자 에 게 입력 을 알려 주 는 것 이 흔 합 니 다.인터넷 검색 만 해도 xaml 코드 를 잃 어 버 렸 어 요.c\#코드 로 이 루어 지 는 건 경향 이 없어 요.일단 내 가 생각 한 건 템 플 릿 이 잖 아.제 가 생각 한 것 은 border 에 textblock 을 끼 워 서 텍스트 내용 을 template Binding 을 통 해 Text 로 바 꾸 는 것 입 니 다.그리고 제 가 원 하 는 효 과 를 얻 었 습 니 다.
<TextBox>
<TextBox.Template>
<ControlTemplate TargetType="TextBox">
<Border BorderThickness="1" Name="border" BorderBrush="Red">
<TextBlock Text="{TemplateBinding Text}"></TextBlock>
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value=""></Condition>
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="border">
<Setter.Value>
<VisualBrush AlignmentX="Left" AlignmentY="Top" Stretch="None">
<VisualBrush.Visual>
<TextBlock Width="500" Height="100" Background="#FFE8DBDB"> 22</TextBlock>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</TextBox.Template>
</TextBox>
마지막 으로 컵 구 를 자세히 보 니 텍스트 내용 이 입력 되 었 을 때 커서 가 없 었 다.그리고 내 가 생각 한 것 은 템 플 릿 에 있 는 textblock 을 textbox 로 바 꾸 면 끝 이 잖 아.자,컵 에 워 터 마크 효과 가 있 습 니 다.결국 잘 못 했 어.TextBox 가 가지 고 있 는 템 플 릿 을 변경 하여 효 과 를 얻 으 려 고 시도 합 니 다.
시스템 기본 textBox 의 템 플 릿 visualTree 를 내 보 냅 니 다.시 도 를 통 해 성공 적 으로 효 과 를 얻 었 습 니 다.특히 인터넷 에 있 는 사람들 이 많이 붙 인 xaml 코드 안에 scrollviewer 가 들 어 있 고 정확하게 작 동 할 수 있어 서 이해 하기 어렵 습 니 다.원래 시스템 이 묵인 한 것 은 scrollviewer 입 니 다.그 렇 군요.그리고 Name=PARTContentHost 그 가 쓰 면 자 연 스 럽 게 당초 내용 의 숙주 에 의 해 처 리 될 수 있다.보아하니 PARTContentHost 아주 특별한 시스템 이름 입 니 다.그리고 여러 줄 의 텍스트 상 자 는 Accepts Return="True"Vertical Scrollbar Visibility="Auto"속성 을 설정 하여 다음 과 같 습 니 다.
<TextBox Text="" Height="60" Name="nihao" Width="300" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" >
<TextBox.Template>
<ControlTemplate TargetType="TextBox">
<!-- PART_ContentHost
scrollviewer
visualtree 。 decorator scrollviewer PART_ContentHost
-->
<Border Name="borderContent" CornerRadius="10 0 0 10" BorderThickness="1" BorderBrush="Blue" Background="#FFE8DBDB" SnapsToDevicePixels="True">
<ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" Name="PART_ContentHost" Focusable="False"/>
</Border>
<ControlTemplate.Triggers>
<MultiTrigger >
<MultiTrigger.Conditions>
<Condition Property="IsFocused" Value="False"/>
<Condition Property="Text" Value=""/>
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="borderContent" >
<Setter.Value>
<VisualBrush AlignmentX="Left" AlignmentY="Top" Stretch="None">
<VisualBrush.Visual>
<!--
{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=Width}
-->
<TextBlock Width="500" Height="100" Background="#FFE8DBDB"> </TextBlock>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</MultiTrigger>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" TargetName="borderContent" Value="#FFE8DBDB"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</TextBox.Template>
</TextBox>
다른 방식:또 다른 방법 은 외곽 을 직접 제어 하 는 style trigger 도 효 과 를 얻 을 수 있 습 니 다.다만 원 각 border 는 text 컨트롤 외 에 border 를 추가 해 야 실현 할 수 있 습 니 다.
<TextBox Text="" Height="30" BorderThickness="1" BorderBrush="Blue" Margin="10">
<TextBox.Style>
<Style TargetType="TextBox">
<!-- background , -->
<Setter Property="Background" Value="#FFE8DBDB"></Setter>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value="" ></Condition>
</MultiTrigger.Conditions>
<Setter Property="Background" >
<Setter.Value>
<VisualBrush AlignmentX="Left" AlignmentY="Top" Stretch="None" >
<VisualBrush.Visual >
<Border Background="#FFE8DBDB" Width="500" Height="100">
<TextBlock > </TextBlock>
</Border>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</MultiTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
최종 효과:이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MaterialDesign의 ComboBox HasClearButton 크기 변경WPF MaterialDesign은 편리하지만 때로는 표시가 너무 크거나 약간 사용하기 쉽습니다. ComboBox를 사용할 때 선택한 버튼을 지우려면 지우기 버튼을 표시할 수 있습니다. 아래와 같은 표시가 됩니다 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.