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
相关产品推荐
相关产品推荐

