更改组合框选择时清除TextBox

时间:2016-09-12 06:52:11

标签: uwp uwp-xaml

以下是我的public class ReportHeaderCallBack implements FlatFileHeaderCallback { /* (non-Javadoc) * @see org.springframework.batch.item.file.FlatFileHeaderCallback#writeHeader(java.io.Writer) */ public void writeHeader(Writer writer) throws IOException { writer.write("Script"+","+","+"Date"+","+"Open"+","+"High"+","+"Low"+","+"Close"+","+"True range"+","+"ID"+","+"NR"); } } <bean id="csvFileWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step"> <property name="resource" ... ></property> <property name="lineAggregator" ...></property> <property name="headerCallback"> <bean class="com.equities.batch.ReportHeaderCallBack"/> </property> </bean>

TextBox

和我的<TextBox Text="Hello" />

ComboBox

现在我可以使用后面的代码清除TextBox中的文本。如下所示

<ComboBox VerticalAlignment="Center" Name="srchType" SelectedIndex="0" SelectionChanged="srchType_SelectionChanged">
    <ComboBoxItem Content="Question" />
    <ComboBoxItem Content="Value" />
</ComboBox>

但我希望在private void srchType_SelectionChanged(object sender, SelectionChangedEventArgs e) { asb.Text = ""; } 中执行此操作,而不是使用CodeBehind,因为我只有很少的组合框,并且每个选择更改事件都必须执行某些操作。 (简单的操作,但它们与清除文本框不同)。

有人能指出我如何在xaml中实现这一目标。或者这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

您可以使用XAML Behaviors

声明所需的命名空间:

xmlns:i="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"

并使用它

<StackPanel>
    <TextBox x:Name="myTextBox"
                Text="Hello"/>

    <ComboBox SelectedIndex="0">
        <i:Interaction.Behaviors>
            <i:BehaviorCollection>
                <core:EventTriggerBehavior EventName="SelectionChanged">
                    <core:ChangePropertyAction PropertyName="Text"
                                                TargetObject="{Binding ElementName=myTextBox}"
                                                Value="{Binding Empty, Source={StaticResource EmptyString}}">
                    </core:ChangePropertyAction>
                </core:EventTriggerBehavior>
            </i:BehaviorCollection>
        </i:Interaction.Behaviors>
        <x:Int32>1</x:Int32>
        <x:Int32>2</x:Int32>
        <x:Int32>3</x:Int32>
        <x:Int32>4</x:Int32>
    </ComboBox>
</StackPanel>

但是,你可以看到

Value="{Binding Empty, Source={StaticResource EmptyString}}"

默认情况下,您不能在XAML中声明空字符串(可能在UWP中更改了一些内容),因此我为它创建了辅助类:

public class EmptyString : DependencyObject
{
    public string Empty
    {
        get { return (string)GetValue(EmptyProperty); }
    }

    public static readonly DependencyProperty EmptyProperty =
        DependencyProperty.Register("Empty", typeof(string), typeof(EmptyString), new PropertyMetadata(string.Empty));
}

并在页面上声明:

<Page.Resources>
    <local:EmptyString x:Name="EmptyString"/>
</Page.Resources>

答案 1 :(得分:2)

答案与Andrii发布的内容非常接近,但UWP存在一些差异。

首先,Behaviors SDK不是内置的UWP,但必须与NuGet分开下载。

您可以使用以下命令进行安装:

Install-Package Microsoft.Xaml.Behaviors.Uwp.Managed

或者只需使用NuGet包管理器并搜索Microsoft.Xaml.Behaviors.Uwp.Managed

安装后,您只需将XAML using语句添加到页面顶部:

<Page ...
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core" />

并在需要时使用ChangePropertyAction更改值。在UWP XAML中,您实际上通常可以使用空字符串作为值,它可以按预期工作。

<ComboBox VerticalAlignment="Center" Name="srchType" SelectedIndex="0">
    <interactivity:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="SelectionChanged">
            <core:ChangePropertyAction 
                TargetObject="{Binding ElementName=TheTextBoxToUpdate}"
                PropertyName="Text" Value=""  />
        </core:EventTriggerBehavior>
    </interactivity:Interaction.Behaviors>
    <ComboBoxItem Content="Question" />
    <ComboBoxItem Content="Value" />
</ComboBox>