You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Material Design中调用Enqueue方法时如何设置Snackbar尺寸?

解决Snackbar调用.Enqueue时尺寸不生效的问题

问题原因

当调用Enqueue直接传入UI元素(比如你的messageGrid)时,Snackbar会使用默认消息容器承载内容,不会继承你给Snackbar控件本身设置的宽高属性;而通过IsActive = true激活时,会直接使用Snackbar控件自身布局,因此尺寸能正常生效。

解决方案

方法1:用SnackbarMessage包裹内容后Enqueue

你已创建SnackbarMessage实例但未正确使用,将messageGrid作为SnackbarMessage的内容传入Enqueue,其宽高属性会被应用到消息容器:

// 创建SnackbarMessage并设置宽高,绑定目标内容
SnackbarMessage message = new SnackbarMessage()
{
    Height = 350,
    Width = 400,
    Content = messageGrid // 把你的messageGrid赋值给Content属性
};

// 调用Enqueue传入SnackbarMessage实例
snackbar.MessageQueue.Enqueue(message);

方法2:直接给Enqueue的UI元素设置尺寸

若不想使用SnackbarMessage,可直接给要Enqueue的messageGrid指定宽高:

// 给messageGrid设置目标尺寸
messageGrid.Width = 400;
messageGrid.Height = 350;

// 执行Enqueue操作
snackbar.MessageQueue.Enqueue(messageGrid);

方法3:修改Snackbar模板统一设置尺寸

如果希望所有Enqueue的消息都使用固定尺寸,可自定义Snackbar的ControlTemplate,让消息容器继承控件本身的宽高:

<Style TargetType="materialDesign:Snackbar">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="materialDesign:Snackbar">
                <Grid>
                    <!-- 保留原模板其他元素,修改消息容器的绑定规则 -->
                    <ContentPresenter x:Name="PART_MessagePresenter"
                                      Width="{TemplateBinding Width}"
                                      Height="{TemplateBinding Height}"
                                      Content="{TemplateBinding Message}"
                                      VerticalAlignment="{TemplateBinding VerticalAlignment}" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

修改后,你给Snackbar设置的Height=350和Width=400会被所有Enqueue的消息容器继承。

内容的提问来源于stack exchange,提问作者atnaf99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:35:26