Làm sao để binding data from resource

Chào mọi người, em đang học WPF, em có biết một cách binding thế này:

<TextBox Text="123" Name="hint"></TextBox>
<TextBox Text="{Binding Path=Text, ElementName=hint}"></TextBox>

Em đã áp dụng cách trên vào binding trong resource, nhưng nó không work, đây là resource tạo textbox có hint mờ phía sau: https://stackoverflow.com/questions/7425618/how-can-i-add-a-hint-text-to-wpf-textbox

<StackPanel>
<StackPanel.Resources>
      <Style TargetType="TextBox"  xmlns:sys="clrnamespace:System;assembly=mscorlib">
      <Setter Property="FontSize" Value="16"></Setter>
      <Setter Property="Margin" Value="0 15 0 15"></Setter>
      <Setter Property="Padding" Value="5"></Setter>
      <Setter Property="Width" Value="400"></Setter>
      <Style.Resources>
             <VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None">
                    <VisualBrush.Visual>
                           <Label Content="{Binding Path=Tag, ElementName=hint}" Foreground="Gray" FontSize="16" />
                    </VisualBrush.Visual>
              </VisualBrush>
     </Style.Resources>
     <Style.Triggers>
            <Trigger Property="Text" Value="{x:Static sys:String.Empty}">
                     <Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
             </Trigger>
             <Trigger Property="Text" Value="{x:Null}">
                      <Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
             </Trigger>
             <Trigger Property="IsKeyboardFocused" Value="True">
                      <Setter Property="Background" Value="White" />
              </Trigger>
      </Style.Triggers>
 </Style>
</StackPanel.Resources>
<TextBox Tag = "ShowContent" Name = hint></TextBox>
</StackPanel>

Em không biết có cách nào để set binding từ resource không, nhờ mọi người xem và chỉ giúp em ạ, em xin cảm ơn.

1 Like

Em muốn làm textbox có placeholder ?

4 Likes

Ôi cả tuần nay em ôn thi nên không vào diễn đàn, vấn đề trên em đã giải quyết được rồi ạ, không biết tại sao resource thì không binding được nhưng template thì được ạ, em làm một cái textbox có watermark :grin:

<Style x:Key="WatermarkTextBox" TargetType="TextBox">
        <Setter Property="FontFamily" Value="Segoe UI"/>
        <Setter Property="FontSize" Value="16"/>
        <Setter Property="Foreground" Value="Black"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Padding" Value="4"/>
        <Setter Property="Margin" Value="0 10 0 10"/>
        <Setter Property="Width" Value="300"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TextBox">
                    <Grid>
                        <Border x:Name="Border" BorderThickness="1" BorderBrush="Gray" Cursor="IBeam" SnapsToDevicePixels="True" Width="{TemplateBinding Width}">
                            <ScrollViewer Margin="0" x:Name="PART_ContentHost"></ScrollViewer>
                        </Border>
                        <Label x:Name="Watermark" Visibility="Collapsed" Foreground="Gray" Content="{TemplateBinding Tag}" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="Text" Value=""/>
                                <Condition Property="IsFocused" Value="False"/>
                            </MultiTrigger.Conditions>
                            <Setter TargetName="Watermark" Property="Visibility" Value="Visible"/>
                        </MultiTrigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="Border" Property="BorderBrush" Value="#8ABDEB"></Setter>
                        </Trigger>
                        <Trigger Property="IsFocused" Value="True">
                            <Setter TargetName="Border" Property="BorderBrush" Value="#519CD6"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter TargetName="Border" Property="BorderBrush" Value="LightGray"/>
                            <Setter Property="Foreground" Value="LightGray"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Tiện cho em hỏi luôn, cái IsFocused, iskeyboardfocuswithin và thêm một vài cái focused nữa mà không nhớ tên, không biết nó có gì khác nhau mà khi em dùng lại thấy cái nào cũng giống nhau thế ạ!

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?