Wpf XAML-单击按钮处理时显示文本或微调器图像

Wpf XAML-单击按钮处理时显示文本或微调器图像,wpf,xaml,Wpf,Xaml,我有一个xaml表单(下面给出了相关代码)。我想显示文本/标签或处理图像时,用户点击搜索按钮,它应该隐藏时,结果回来 PS:我不是xaml程序员。我知道asp.NETMVC(c#),但我很快就完成了这个任务 以下是要显示的按钮和标签的代码: <Button Grid.Row="4" Content="{Binding SEARCH}" Grid.Column="8" Foreground="White" Command="{Binding ResubmitQuote}" Height="

我有一个xaml表单(下面给出了相关代码)。我想显示文本/标签或处理图像时,用户点击搜索按钮,它应该隐藏时,结果回来

PS:我不是xaml程序员。我知道asp.NETMVC(c#),但我很快就完成了这个任务

以下是要显示的按钮和标签的代码:

<Button Grid.Row="4" Content="{Binding SEARCH}"  Grid.Column="8" Foreground="White" Command="{Binding ResubmitQuote}" Height="25" x:Name="SearchButton" Click="SearchButton_Click"  >
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background" Value="#753297"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border Background="{TemplateBinding Background}">
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="#9966cc"/>
                </Trigger>                                                    
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

但当返回结果时,将显示标签。

在ViewModel中创建属性

private Visibility fieldtest;

public Visibility MyPropertytest
{
    get
    {
        return this.fieldtest;
    }

    set
    {
        this.fieldtest = value;
        this.OnPropertyChanged("MyPropertytest");
    }
}

     private void ResubmitQuote(object obj)
            {
        Dispatcher.Invoke(MyPropertytest = Visibility.Visible, System.Windows.Threading.DispatcherPriority.Normal); 

        ////Load your data Here for DataBase

Dispatcher.Invoke(MyPropertytest = Visibility.Collapsed, System.Windows.Threading.DispatcherPriority.Normal)
    }
将此属性与标签绑定

 Visibility="{Binding MyPropertytest}"

在ViewModel中创建属性

private Visibility fieldtest;

public Visibility MyPropertytest
{
    get
    {
        return this.fieldtest;
    }

    set
    {
        this.fieldtest = value;
        this.OnPropertyChanged("MyPropertytest");
    }
}

     private void ResubmitQuote(object obj)
            {
        Dispatcher.Invoke(MyPropertytest = Visibility.Visible, System.Windows.Threading.DispatcherPriority.Normal); 

        ////Load your data Here for DataBase

Dispatcher.Invoke(MyPropertytest = Visibility.Collapsed, System.Windows.Threading.DispatcherPriority.Normal)
    }
将此属性与标签绑定

 Visibility="{Binding MyPropertytest}"

在你的按钮命令中使用这个代码对我来说很好

xaml


在你的按钮命令中使用这个代码对我来说很好

xaml


<>我建议你考虑模型视图视图模型模式来管理你的应用程序的导航逻辑和内容。p> 作为MVVM框架,您可以使用它来公开一些有用的方法

在这种情况下,我将实现一个
RelayCommand
来管理按钮的操作,并实现
IValueConverter
来管理内容的可见性

按钮的单击行为:

private RelayCommand _searchCommand;
public RelayCommand SearchCommand
{
    get
    {
        return _searchCommand
            ?? (_searchCommand = new RelayCommand(
            async () =>
            {
                IsProcessing = true;
                // Your Logic, for example
                // await DoSomething
                IsProcessing = false;
            }
    }
}
public class TrueCollapsedConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (bool)value ? Visibility.Collapsed: Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return null;
    }
}
按钮的XAML

<Button ... Command={Binding SearchCommand} ... />
<Label ... Visibility={Binding IsProcessing, Converter={StaticResource TrueCollapsedConverter} ... />
您的属性在处理某些内容(定义到ViewModel的类中)时让视图知道:

您要定义转换器的XAML(您可以将其放入App.XAML或Page.Resources标记中):


要管理可见性的对象的XAML:

<Button ... Command={Binding SearchCommand} ... />
<Label ... Visibility={Binding IsProcessing, Converter={StaticResource TrueCollapsedConverter} ... />


<代码> > P>我建议您考虑模型视图视图模型模式来管理应用程序的导航逻辑和内容。p> 作为MVVM框架,您可以使用它来公开一些有用的方法

在这种情况下,我将实现一个
RelayCommand
来管理按钮的操作,并实现
IValueConverter
来管理内容的可见性

按钮的单击行为:

private RelayCommand _searchCommand;
public RelayCommand SearchCommand
{
    get
    {
        return _searchCommand
            ?? (_searchCommand = new RelayCommand(
            async () =>
            {
                IsProcessing = true;
                // Your Logic, for example
                // await DoSomething
                IsProcessing = false;
            }
    }
}
public class TrueCollapsedConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (bool)value ? Visibility.Collapsed: Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return null;
    }
}
按钮的XAML

<Button ... Command={Binding SearchCommand} ... />
<Label ... Visibility={Binding IsProcessing, Converter={StaticResource TrueCollapsedConverter} ... />
您的属性在处理某些内容(定义到ViewModel的类中)时让视图知道:

您要定义转换器的XAML(您可以将其放入App.XAML或Page.Resources标记中):


要管理可见性的对象的XAML:

<Button ... Command={Binding SearchCommand} ... />
<Label ... Visibility={Binding IsProcessing, Converter={StaticResource TrueCollapsedConverter} ... />


您是否使用MVVM模式您是否使用上述代码实现的MVVM模式,返回结果时会显示标签。按钮按下时应实际显示,结果返回时应隐藏。Dispatcher.Invoke在Viewmodel中不可用,Dispatcher.CurrentDispatcher.Invoke可用,但这不是给定参数使用此代码,Application.Current.Dispatcher.BeginInvoke(新操作(()=>{MyPropertytest=Visibility.Visible;});实现了上述代码,这将在结果返回时显示标签。实际应在按下按钮时显示,并在结果返回时隐藏。Dispatcher.Invoke在Viewmodel中不可用,Dispatcher.CurrentDispatcher.Invoke可用,但不使用给定参数使用此代码Application.Current.Dispatcher.BeginInvoke(新操作()=>{MyPropertytest=Visibility.Visible;});这会在按下按钮时显示文本,但在返回结果时不会隐藏。我在SearchButton_Click(object sender,RoutedEventTargets e)中添加了上面的代码{//上面的代码在这里}.do your code here部分位于命令方法内部,无法访问此处的lable以将其可见性再次设置为隐藏。如果使用MVVM,请为Label绑定可见性。编辑了答案。Dispatcher.Invoke((操作)(()=>{}),DispatcherPriority.Render);在命令方法中出现错误。错误8非静态字段、方法或属性的System.Windows.Threading.Dispatcher.Invoke(System.Delegate、System.Windows.Threading.DispatcherPriority、params对象[])需要对象引用'当按下按钮时显示文本,但当返回结果时不会隐藏。我在SearchButton_Click(object sender,RoutedEventTargets e)中添加了上述代码{//Over code here}.do your code here部分位于命令方法内部,无法访问此处的lable以将其可见性再次设置为隐藏。如果使用MVVM,请为Label绑定可见性。编辑了答案。Dispatcher.Invoke((操作)(()=>{}),DispatcherPriority.Render);在命令方法中出现错误。错误8非静态字段、方法或属性“System.Windows.Threading.Dispatcher.Invoke(System.Delegate,System.Windows.Threading.DispatcherPriority,params object[])需要对象引用