首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >膨胀机控制- UWP

膨胀机控制- UWP
EN

Stack Overflow用户
提问于 2020-10-02 17:18:00
回答 1查看 306关注 0票数 0

我的UWP应用程序中有一个扩展程序控件,代码如下:

代码语言:javascript
复制
<Expander
     Header="A"
     IsExpanded =" True">
     <TextBlock
       Text="Content in A"/>
</Expander>
<Expander
     Header="B">
     <TextBlock
       Text="Content in B"/>
</Expander>

目前,扩展程序A在默认情况下是展开的,B是关闭的。但是,当我展开B时,A也是开的。我想要的行为是,如果我扩大一个,另一个关闭,反之亦然。对于如何以MVVM的方式实现这一点,有什么建议吗?我需要在这里使用转换器吗?我研究了Collapse all the expanders and expand one of them by default,但大多数解决方案碰巧都是在修改后面的代码。如果我在Main.xaml中有一个XAML代码,并且我有一个相应的MainPageViewModel.cs,那么如何实现相同的目标呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-05 02:19:20

我想要的行为是,如果我展开一个,另一个关闭,反之亦然。

对于此场景,您可以使用OppositConverter使另一个支出器在前面打开时关闭。

代码语言:javascript
复制
public class OppositConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
  
        return !(bool)value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return !(bool)value;
    }
}
public class MainPageViewModel : INotifyPropertyChanged
{
    public MainPageViewModel()
    {

    }
    private bool _isExpend;

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName] string name = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }
    public bool IsExpend
    {
        get
        {
            return _isExpend;
        }
        set
        {
            _isExpend = value;
            OnPropertyChanged();
        }
    }
}

使用

代码语言:javascript
复制
<Page.DataContext>
    <local:MainPageViewModel x:Name="ViewModel" />
</Page.DataContext>
<Page.Resources>
    <local:OppositConverter x:Key="OppositConverter" />
</Page.Resources>
<StackPanel>
    <controls:Expander
        x:Name="Expander1"
        Margin="0,0,0,10"
        VerticalAlignment="Top"
        HorizontalContentAlignment="Stretch"
        ExpandDirection="Down"
        Header="This is the header - expander 1"
        IsExpanded="{Binding IsExpend, Mode=TwoWay}">
        <Grid>
            <TextBlock
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Text="This is the expanded content"
                TextWrapping="Wrap" />
        </Grid>
    </controls:Expander>
    <controls:Expander
        x:Name="Expander2"
        Margin="0,0,0,10"
        VerticalAlignment="Top"
        HorizontalContentAlignment="Stretch"
        ExpandDirection="Down"
        Header="This is the header - expander 2"
        IsExpanded="{Binding IsExpend, Converter={StaticResource OppositConverter}, Mode=TwoWay}">
        <Grid>
            <TextBlock
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Text="This is the expanded content"
                TextWrapping="Wrap" />
        </Grid>
    </controls:Expander>     
</StackPanel>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64175756

复制
相关文章

相似问题

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