C# 文本框删除按钮(小x)在通过绑定设置文本时不可见

C# 文本框删除按钮(小x)在通过绑定设置文本时不可见,c#,xaml,windows-10,uwp,C#,Xaml,Windows 10,Uwp,我有一个带有文本框的UWP应用程序(C#)。文本框绑定到属性,双向: Text="{Binding NameFilterString, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 当我在文本框中键入时,会出现“删除按钮”-右角的小x。按预期,单击它将清除文本框的文本和属性值 当属性更改时,TextBox's文本将正确更新,但删除按钮不会出现。我能让它看得见吗?通过属性或以某种方式“刷新”它?只需右键单击文本框->编辑模板->编辑副本。下

我有一个带有
文本框的UWP应用程序(C#)。文本框绑定到属性,双向:

Text="{Binding NameFilterString, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
当我在
文本框中键入时,会出现“删除按钮”-右角的小x。按预期,单击它将清除
文本框的文本和属性值


当属性更改时,
TextBox'
s文本将正确更新,但删除按钮不会出现。我能让它看得见吗?通过属性或以某种方式“刷新”它?

只需右键单击文本框->编辑模板->编辑副本。下面是我从文档中获取的默认值,例如,在您要更改的内容旁边有注释

            <!-- Default style for Windows.UI.Xaml.Controls.TextBox -->
            <Style TargetType="TextBox">
        <!-- *** We add a setter for a default -->
              <Setter Property="Tag" Value="Collapsed"/>
              <Setter Property="MinWidth" Value="{ThemeResource TextControlThemeMinWidth}" />
              <Setter Property="MinHeight" Value="{ThemeResource TextControlThemeMinHeight}" />
              <Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" />
              <Setter Property="Background" Value="{ThemeResource SystemControlBackgroundAltHighBrush}" />
              <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundChromeDisabledLowBrush}" />
              <Setter Property="SelectionHighlightColor" Value="{ThemeResource SystemControlHighlightAccentBrush}" />
              <Setter Property="BorderThickness" Value="{ThemeResource TextControlBorderThemeThickness}" />
              <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
              <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
              <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden" />
              <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden" />
              <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False" />
              <Setter Property="Padding" Value="{ThemeResource TextControlThemePadding}"/>
              <Setter Property="Template">
                <Setter.Value>
                  <ControlTemplate TargetType="TextBox">
                    <Grid>
                      <Grid.Resources>
                        <Style x:Name="DeleteButtonStyle" TargetType="Button">
                          <Setter Property="Template">
                            <Setter.Value>
                              <ControlTemplate TargetType="Button">
                                <Grid x:Name="ButtonLayoutGrid" BorderBrush="{ThemeResource TextBoxButtonBorderThemeBrush}"
                                                                BorderThickness="{TemplateBinding BorderThickness}"
                                                                Background="{ThemeResource TextBoxButtonBackgroundThemeBrush}">
                                  <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="CommonStates">
                                      <VisualState x:Name="Normal" />
                                      <VisualState x:Name="PointerOver">
                                        <Storyboard>
                                          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="GlyphElement"
                                                                         Storyboard.TargetProperty="Foreground">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAccentBrush}" />
                                          </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                      </VisualState>
                                      <VisualState x:Name="Pressed">
                                        <Storyboard>
                                          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ButtonLayoutGrid"
                                                                         Storyboard.TargetProperty="Background">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAccentBrush}" />
                                          </ObjectAnimationUsingKeyFrames>
                                          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="GlyphElement"
                                                                         Storyboard.TargetProperty="Foreground">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltChromeWhiteBrush}" />
                                          </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                      </VisualState>
                                      <VisualState x:Name="Disabled">
                                        <Storyboard>
                                          <DoubleAnimation Storyboard.TargetName="ButtonLayoutGrid"
                                                           Storyboard.TargetProperty="Opacity"
                                                           To="0"
                                                           Duration="0" />
                                        </Storyboard>
                                      </VisualState>
                                    </VisualStateGroup>
                                  </VisualStateManager.VisualStateGroups>
                                  <TextBlock x:Name="GlyphElement"
                                              Foreground="{ThemeResource SystemControlForegroundChromeBlackMediumBrush}"
                                              VerticalAlignment="Center"
                                              HorizontalAlignment="Center"
                                              FontStyle="Normal"
                                              FontSize="12"
                                              Text="&#xE10A;"
                                              FontFamily="{ThemeResource SymbolThemeFontFamily}"
                                              AutomationProperties.AccessibilityView="Raw"/>
                                </Grid>
                              </ControlTemplate>
                            </Setter.Value>
                          </Setter>
                        </Style>
                      </Grid.Resources>
                      <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                          <VisualState x:Name="Disabled">
                            <Storyboard>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HeaderContentPresenter"
                                                               Storyboard.TargetProperty="Foreground">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseLowBrush}" />
                              </ObjectAnimationUsingKeyFrames>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundElement"
                                                             Storyboard.TargetProperty="Background">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledTransparentBrush}" />
                              </ObjectAnimationUsingKeyFrames>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderElement"
                                                             Storyboard.TargetProperty="Background">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" />
                              </ObjectAnimationUsingKeyFrames>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderElement"
                                                             Storyboard.TargetProperty="BorderBrush">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseLowBrush}" />
                              </ObjectAnimationUsingKeyFrames>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentElement"
                                                             Storyboard.TargetProperty="Foreground">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledChromeDisabledLowBrush}" />
                              </ObjectAnimationUsingKeyFrames>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PlaceholderTextContentPresenter"
                                                             Storyboard.TargetProperty="Foreground">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledChromeDisabledLowBrush}" />
                              </ObjectAnimationUsingKeyFrames>
                            </Storyboard>
                          </VisualState>
                          <VisualState x:Name="Normal" />
                          <VisualState x:Name="PointerOver">
                            <Storyboard>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderElement"
                                                             Storyboard.TargetProperty="BorderBrush">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightChromeAltLowBrush}" />
                              </ObjectAnimationUsingKeyFrames>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundElement"
                                                             Storyboard.TargetProperty="Opacity">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextControlBackgroundHoverOpacity}" />
                              </ObjectAnimationUsingKeyFrames>
                            </Storyboard>
                          </VisualState>
                          <VisualState x:Name="Focused">
                            <Storyboard>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PlaceholderTextContentPresenter"
                                                             Storyboard.TargetProperty="Foreground">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlPageTextChromeBlackMediumLowBrush}" />
                              </ObjectAnimationUsingKeyFrames>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundElement"
                                                             Storyboard.TargetProperty="Background">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundChromeWhiteBrush}" />
                              </ObjectAnimationUsingKeyFrames>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundElement"
                                                             Storyboard.TargetProperty="Opacity">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextControlBackgroundFocusedOpacity}" />
                              </ObjectAnimationUsingKeyFrames>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderElement"
                                                             Storyboard.TargetProperty="BorderBrush">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAccentBrush}" />
                              </ObjectAnimationUsingKeyFrames>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentElement"
                                                             Storyboard.TargetProperty="Foreground">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlForegroundChromeBlackHighBrush}" />
                              </ObjectAnimationUsingKeyFrames>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentElement"
                                                             Storyboard.TargetProperty="RequestedTheme">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="Light" />
                              </ObjectAnimationUsingKeyFrames>
                            </Storyboard>
                          </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="ButtonStates">    
                          <VisualState x:Name="ButtonVisible">
<!-- *** We need to ditch this default VisualState, so take what exists and swap it for this.
                            <Storyboard>
                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="DeleteButton"
                                                             Storyboard.TargetProperty="Visibility">
                                <DiscreteObjectKeyFrame KeyTime="0">
                                  <DiscreteObjectKeyFrame.Value>
                                    <Visibility>Visible</Visibility>
                                  </DiscreteObjectKeyFrame.Value>
                                </DiscreteObjectKeyFrame>
                              </ObjectAnimationUsingKeyFrames>
                            </Storyboard>
    -->
                          </VisualState>
                          <VisualState x:Name="ButtonCollapsed" />
                        </VisualStateGroup>
                      </VisualStateManager.VisualStateGroups>
                      <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="Auto" />
                      </Grid.ColumnDefinitions>
                      <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="*" />
                      </Grid.RowDefinitions>
                      <Border x:Name="BackgroundElement"
                              Grid.Row="1"
                              Background="{TemplateBinding Background}"
                              Margin="{TemplateBinding BorderThickness}"
                              Opacity="{ThemeResource TextControlBackgroundRestOpacity}"
                              Grid.ColumnSpan="2"
                              Grid.RowSpan="1"/>
                      <Border x:Name="BorderElement"
                              Grid.Row="1"
                              BorderBrush="{TemplateBinding BorderBrush}"
                              BorderThickness="{TemplateBinding BorderThickness}"
                              Grid.ColumnSpan="2"
                              Grid.RowSpan="1"/>
                      <ContentPresenter x:Name="HeaderContentPresenter"
                                        x:DeferLoadStrategy="Lazy"
                                        Visibility="Collapsed"
                                        Grid.Row="0"
                                        Foreground="{ThemeResource SystemControlForegroundBaseHighBrush}"
                                        Margin="0,0,0,8"
                                        Grid.ColumnSpan="2"
                                        Content="{TemplateBinding Header}"
                                        ContentTemplate="{TemplateBinding HeaderTemplate}"
                                        FontWeight="Normal" />
                      <ScrollViewer x:Name="ContentElement"
                                    Grid.Row="1"
                                    HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}"
                                    HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
                                    VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}"
                                    VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
                                    IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}"
                                    IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}"
                                    IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
                                    Margin="{TemplateBinding BorderThickness}"
                                    Padding="{TemplateBinding Padding}"
                                    IsTabStop="False"
                                    AutomationProperties.AccessibilityView="Raw"
                                    ZoomMode="Disabled" />
                      <ContentControl x:Name="PlaceholderTextContentPresenter"
                                    Grid.Row="1"
                                    Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}"
                                    Margin="{TemplateBinding BorderThickness}"
                                    Padding="{TemplateBinding Padding}"
                                    IsTabStop="False"
                                    Grid.ColumnSpan="2"
                                    Content="{TemplateBinding PlaceholderText}"
                                    IsHitTestVisible="False"/>
        <!-- *** Here's your culprit, notice the change to the value -->
                      <Button x:Name="DeleteButton"
                              Grid.Row="1"
                              Style="{StaticResource DeleteButtonStyle}"
                              BorderThickness="{TemplateBinding BorderThickness}"
                              Margin="{ThemeResource HelperButtonThemePadding}"
                              IsTabStop="False"
                              Grid.Column="1"
                              Visibility="{TemplateBinding Tag}"
                              FontSize="{TemplateBinding FontSize}"
                              MinWidth="34"
                              VerticalAlignment="Stretch"/>
                    </Grid>
                  </ControlTemplate>
                </Setter.Value>
              </Setter>
            </Style>

那么在这个情况下,

<TextBox Tag="{Binding blah}"/>

如果要设置布尔值,请不要忘记在其上添加可见性转换器。瞧,完成了。希望这有帮助


哦,PS-如果您没有使用默认值引用编辑过的样式进行继承,也不要忘记向其添加
Style=“{StaticResource TheCopiedTemplateNameYouMade}”

其可见性通过样式模板的VSM中的状态控制。您可以使用
VisualStateManager.GoToState
方法,也可以直接编辑模板,使其始终可见。或者模板绑定该属性并以这种方式进行切换。希望我有时间来举一个例子,但是不要,所以只留下评论。好的,我现在看到这是一个焦点问题,而不是绑定问题。当文本框有焦点时,x是可见的,在我寻找x的场景中,文本框不再有焦点。。。我仍然喜欢一个如何始终显示它的示例,或者如何自己控制可见性。哦,那真的很容易。如果您去查看默认模板,看看它们如何具有
Visibility=”