首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >取决于IsChecked C#的UWP ToggleButton文本

取决于IsChecked C#的UWP ToggleButton文本
EN

Stack Overflow用户
提问于 2020-10-12 22:58:09
回答 1查看 181关注 0票数 0

我想在UWP应用程序中将按钮文本从"Run“更改为"Stop”并向后更改,并更改click flag的布尔属性。我尝试使用微软的XamlBehaviors库。

XAML:

代码语言:javascript
运行
复制
<ToggleButton x:Name="ToggleButton" Grid.Row="1" Grid.Column="0"
                      Height="79" HorizontalAlignment="Stretch" Margin="33,0,-74,0"
                      IsChecked="{Binding IsGraphRenderingEnabled, Mode=TwoWay}"
                      Command="{Binding ToogleGraphRendering}">

            <Grid>
                <interactivity:Interaction.Behaviors>
                    <core:DataTriggerBehavior
                        Binding="{Binding IsChecked, 
                            ElementName=ToggleButton}"
                        Value="True" />
                    <core:DataTriggerBehavior
                        Binding="{Binding IsChecked, 
                            ElementName=ToggleButton}"
                        Value="False" />
                    <core:ChangePropertyAction TargetObject="{Binding GraphRenderingButtonText}"
                                               PropertyName="Content"
                                               Value="Run" />

                </interactivity:Interaction.Behaviors>

            </Grid>
        </ToggleButton>

代码隐藏:

代码语言:javascript
运行
复制
 public MainViewModel()
    {
        InitializeCommands();
    }
    private bool _isGraphRenderingEnabled;

    public bool IsGraphRenderingEnabled
    {
        get => _isGraphRenderingEnabled;
        set => SetField(ref _isGraphRenderingEnabled, value);
    }

    private string _graphRenderingButtonText;
    public string GraphRenderingButtonText
    {
        get => _graphRenderingButtonText;
        private set => SetField(ref _graphRenderingButtonText, value);
    }
    
    private void InitializeCommands()
    {
        ToogleGraphRendering = new RelayCommand(StartStopRendering);
    }

    private async void StartStopRendering()
    {
        if (IsGraphRenderingEnabled)
        {
            GraphRenderingButtonText = "Stop";
            var contentDialog = new ContentDialog
            {
                Title = "Attention!",
                Content = "Are you sure to stop rendering?",
                PrimaryButtonText = "ОК",
                SecondaryButtonText = "Cancel"
            };

            await contentDialog.ShowAsync();
        }
    }

它不能正常工作。我无法更改按钮文本。所以我想我在Xaml行为上是错误的,但是我不知道在哪里…

EN

回答 1

Stack Overflow用户

发布于 2020-10-13 06:13:54

我会将以下代码添加到您的MainViewModel类中:

代码语言:javascript
运行
复制
public string RenderToggleText(bool? c)
    => c is bool check && check ? "Stop" : "Run";

并在XAML中定义ToggleButton,如下所示:

代码语言:javascript
运行
复制
<ToggleButton x:Name="ToggleButton" Grid.Row="1" Grid.Column="0"
              Height="79" HorizontalAlignment="Stretch" Margin="33,0,-74,0"
              IsChecked="{Binding IsGraphRenderingEnabled, Mode=TwoWay}"
              Command="{Binding ToogleGraphRendering}"
              Content="{x:Bind RenderToggleText(ToggleButton.IsChecked), Mode=OneWay}"/>

现在,当ToggleButtonIsChecked值更改时,将调用RenderToggleButton方法,从而相应地更新其内容。

由于您似乎已经有了一个实现INotifyPropertyChangedGraphRenderingButtonText属性,因此您也可以将ToggleButtonContent绑定到此属性:

代码语言:javascript
运行
复制
Content="{x:Bind GraphRenderingButtonText, Mode=TwoWay}"

然而,在第一种方法中,您不再需要这个属性,因此您不必更改它,因为它是自动完成的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64320258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档