0

需要更改页面背景。我有这样的课:

class DataClass:INotifyPropertyChanged
{
    private string currentTheme;

    public string CurrentTheme
    {
        get { return currentTheme; }
        set
        {
            currentTheme = value;
            OnPropertyChanged("CurrentTheme");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string property)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
    }
}

在我的应用程序的ResourseDictionary中有数据样式

<local:DataClass x:Key="Data" CurrentTheme="Default"/>

        <!-- Styles -->

        <Style x:Key="Page"
               TargetType="ContentPage">

            <Style.Triggers>

                <!-- Need to bind it to Data-->
                <DataTrigger >
                  <Setter Property="BackgroundColor"
                          Value="Aqua"/>
                </DataTrigger>

            </Style.Triggers>

        </Style>

无法将DataTrigger绑定到Data.CurrentTheme。尝试过BindingContext但大多有错误。请帮忙

4

1 回答 1

0

如果您尝试为您的应用程序设置主题并且需要在两者之间更改主题,那么您最好使用新的Xamarin.Forms 主题。您可以通过 nuget 使用预先构建的明暗主题,也可以创建自己的本地主题并在整个应用程序中使用它。

创建自定义主题将引导您详细了解如何创建和使用主题的所有步骤。

DataTriggers 与 PropertyTriggers 非常相似,只是我们不指定 Property,而是指定触发器的 Binding。此绑定通常引用页面上另一个 VisualElement 的属性,或者它可以引用 ViewModel 中的属性。

例如:当条目的 Text.Length 属性为 0 时禁用按钮。

<StackLayout Spacing="20">
<Entry x:Name="emailAddress" Text="" Placeholder="email address"/>
<Button Text="Send">
  <Button.Triggers>
    <DataTrigger TargetType="Button"
         Binding="{Binding Source={x:Reference emailAddress},Path=Text.Length}" Value="0">
      <Setter Property="IsEnabled" Value="False" />
    </DataTrigger>
  </Button.Triggers>
</Button>
</StackLayout>

如果您需要更多信息,请阅读Xamarin.Forms 中的数据触发器和触发器

于 2016-09-18T21:48:44.230 回答