WinRT -以编程方式更改Flyout Setter的值

本文关键字:Flyout Setter 的值 方式更 编程 WinRT | 更新日期: 2023-09-27 18:05:23

在一个windows store应用程序项目中,我有一个Flyout,具有一定的风格

<Flyout>
...
      <Flyout.FlyoutPresenterStyle>
                <Style TargetType="FlyoutPresenter">
                    <Setter Property="ScrollViewer.ZoomMode" Value="Enabled"/>
                    <Setter Property="Background" Value="Transparent"/>
                    <Setter Property="BorderBrush" Value="Transparent"/>
                    <Setter Property="BorderThickness" Value="5"/>
                    <Setter Property="MinHeight" Value="300"/>
                    <Setter Property="MinWidth" Value="300"/>
                    <Setter x:Name="FlyMargin" Property="Margin" Value="0,0,0,0"/>
                </Style>
            </Flyout.FlyoutPresenterStyle>
        </Flyout>

我试图在后面的代码中以编程方式更改边距,但到目前为止我失败了

我试过了~

InfoFlyout.FlyoutPresenterStyle.Setters.Add(new Setter
    {
        Property = FlyoutPresenter.MarginProperty,
        Value = "50,0,0,0"
   });

在第一次调用飞出时有效,但第二次if给出了一个异常。我也试过这样做,但仍然不起作用

InfoFlyout.FlyoutPresenterStyle.Setters.ElementAt(6).SetValue(FlyoutPresenter.MarginProperty, "-28,125,0,0");

如何更改后面代码中的Margin Setter ?

WinRT -以编程方式更改Flyout Setter的值

似乎不能多次添加同一个Setter。
我建议您将XAML样式完全移到代码后面,设置所有属性并替换FlyoutPresenterStyleProperty:

var style = new Style(typeof(FlyoutPresenter));
style.Setters.Add(new Setter(FlyoutPresenter.MarginProperty, new Thickness(50, 0, 0, 0)));
//style.Setters.Add(new Setter(FlyoutPresenter... //Do It For All Properties
YourElementName.Flyout.SetValue(Flyout.FlyoutPresenterStyleProperty, style);