XAML WPF材料设计Snackbar持续时间

23c0lvtd  于 2022-12-07  发布在  其他
关注(0)|答案(3)|浏览(311)

嘿,所有我试图弄清楚我如何可以emplimment的小吃店,与屠夫男孩材料设计在XAML工具包发现herehere的持续时间。
没有地方说明我是否可以使用一个持续时间,所以也许我只是在代码中查看它?一定有一个参数允许这样做?
我目前的程式码如下(程式码后置):

items.Snackbar.MessageQueue.Enqueue("Wow, easy!")

以及XAML:

<materialDesign:Snackbar 
        HorizontalAlignment="Stretch" 
        MessageQueue="{materialDesign:MessageQueue}" 
        x:Name="Snackbar" 
        Grid.Row="1" 
        Grid.ColumnSpan="2" />

这确实有效,并显示“哇,容易!”但它消失得太快,所以这就是为什么我试图找到一种方法来做一个持续时间。

qyyhg6bp

qyyhg6bp1#

SnackbarMessageQueue具有以下构造函数:

public SnackbarMessageQueue(TimeSpan messageDuration)

因此你可以在一个视图模型中创建消息队列,并进行赋值,例如:

<materialDesign:Snackbar MessageQueue="{Binding MyCustomMessageQueue}" />

或者,使用程式码后置(Code Behind),命名控件:

<materialDesign:Snackbar x:Name="MySnackbar" />

然后,在代码隐藏中,您可以分配一个新的小吃店:

var myMessageQueue = new SnackbarMessageQueue(TimeSpan.FromMilliseconds(8000));
MySnackbar.MessageQueue = myMessageQueue;

将来我们可以将其添加到示例中使用的标记扩展中,请随时在GitHub上提出请求。

gmxoilav

gmxoilav2#

这里有另一种方法为Xaml工具包中的Material Design的Snackbar添加持续时间。
XAML文件:

<materialDesign:Snackbar 
                 IsActive="False" 
                 x:Name="SnackbarOne"  
                 MessageQueue="{materialDesign:MessageQueue}"/>

程式码后置:

SnackbarOne.MessageQueue?.Enqueue("Wow, easy!", null, null, null, false, true, TimeSpan.FromSeconds(3));
yrwegjxp

yrwegjxp3#

1.检视

<materialDesign:Snackbar
            Width="450"
            Margin="4"
            HorizontalAlignment="Right"
            VerticalAlignment="Bottom"
            MessageQueue="{Binding SnackbarMessageQueue}" />

1.上下文

public SnackbarMessageQueue SnackbarMessageQueue { set; get; } = 
        new(TimeSpan.FromSeconds(1)); // you could set a default time or not..

1.实用工具

public static void SnackbarEnqueue(this SnackbarMessageQueue snackbarMsgQueue,
    string msg, string btnContent = "", Action btnAction = null, double duration = 1) =>
    snackbarMsgQueue.Enqueue(msg,
            btnContent,
            _ => btnAction?.Invoke(), actionArgument:null, 
            promote:false, neverConsiderToBeDuplicate:false, 
            durationOverride:TimeSpan.FromSeconds(duration));

1.样品使用:

SnackbarMessageQueue.SnackbarEnqueue("Hi there1");
SnackbarMessageQueue.SnackbarEnqueue("Hi there2", duration: 2);
SnackbarMessageQueue.SnackbarEnqueue("Hi there3", "Click Me!", () => Console.WriteLine("Snackbar button clicked.."));

相关问题