UWP ColorPicker 使用绑定在工作表之间传输颜色
UWP ColorPicker transfer color between sheets using Binding
我正在尝试将所选颜色从我的拾色器传递到另一个
我有以下成功写入控制台的 ColorChanged 事件,它位于我项目的 Settings_Page.xaml 部分:
public Color _TextColour;
private void TextColourPicker_ColorChanged(ColorPicker sender, ColorChangedEventArgs args)
{
_TextColour = TextColourPicker.Color;
Debug.WriteLine(_TextColour);
}
然后我尝试将其 "read" 放入名为 MainPage.xaml 的单独页面上的 XAML 绑定中。它旨在更改导航视图项的颜色。我正在尝试使用以下方法执行此操作:
<NavigationViewItem x:Name="TestItem"
Content="ColourTest"
Tag="Test_Page"
FontSize="22"
HorizontalAlignment="Stretch"
FontWeight="Bold"
Foreground="{Binding Path=Settings_Page._TextColour, Mode=OneWay}">
<NavigationViewItem.Icon>
<SymbolIcon Symbol="Shop"/>
</NavigationViewItem.Icon>
</NavigationViewItem>
目前无法使用。它将文本显示为黑色。我觉得我是从错误的角度来处理这个问题的,但不确定我哪里出了问题。我觉得问题绝对不在 SettingsPage 中,而是在我处理 Binding 的方式中。
前景是Brush类型属性,你绑定的是Color类型的值。将 _TextColour 的类型更改为 Brush,并使用
填充它
_TextColour = new SolidColorBrush(TextColourPicker.Color);
您不能在两个不同的页面之间进行数据绑定。在 UWP 中有一个 Frame
控件用于页面之间的导航并处理 Page
生命周期。关键观察是,当您在页面之间导航时,内存中始终只有一页(除非您使用 NavigationCacheMode
)。因此,一旦您从 SettingsPage
导航回来,它就消失了,您无法绑定到它。此外 - 再次导航到 SettingsPage
会产生一个新的页面实例,这也很重要 - 数据绑定要求您绑定到一个实例,在这种情况下会发生变化。
所以如果你想在两个页面之间传递一些值,你需要一些其他的机制来实现。最简单的方法是某种 static
class ,您可以在其中分配选定的颜色,或者在从第二页。但请记住,您还需要一个额外的非静态 属性 用于数据绑定,因为它不适用于 static
。这肯定不是最干净的解决方案,但它可以在更简单的场景中完成工作。
如果您有一个 MVVM 框架,如果您的导航堆栈视图模型保留在内存中,您可以更好地解决这个问题 - 例如,您可以使用事件中心或 Messenger 并使用设置接收者页面订阅的数据。 MvvmCross 和 Mvvm Light 都有能够做到这一点的解决方案。
我正在尝试将所选颜色从我的拾色器传递到另一个
我有以下成功写入控制台的 ColorChanged 事件,它位于我项目的 Settings_Page.xaml 部分:
public Color _TextColour;
private void TextColourPicker_ColorChanged(ColorPicker sender, ColorChangedEventArgs args)
{
_TextColour = TextColourPicker.Color;
Debug.WriteLine(_TextColour);
}
然后我尝试将其 "read" 放入名为 MainPage.xaml 的单独页面上的 XAML 绑定中。它旨在更改导航视图项的颜色。我正在尝试使用以下方法执行此操作:
<NavigationViewItem x:Name="TestItem"
Content="ColourTest"
Tag="Test_Page"
FontSize="22"
HorizontalAlignment="Stretch"
FontWeight="Bold"
Foreground="{Binding Path=Settings_Page._TextColour, Mode=OneWay}">
<NavigationViewItem.Icon>
<SymbolIcon Symbol="Shop"/>
</NavigationViewItem.Icon>
</NavigationViewItem>
目前无法使用。它将文本显示为黑色。我觉得我是从错误的角度来处理这个问题的,但不确定我哪里出了问题。我觉得问题绝对不在 SettingsPage 中,而是在我处理 Binding 的方式中。
前景是Brush类型属性,你绑定的是Color类型的值。将 _TextColour 的类型更改为 Brush,并使用
填充它_TextColour = new SolidColorBrush(TextColourPicker.Color);
您不能在两个不同的页面之间进行数据绑定。在 UWP 中有一个 Frame
控件用于页面之间的导航并处理 Page
生命周期。关键观察是,当您在页面之间导航时,内存中始终只有一页(除非您使用 NavigationCacheMode
)。因此,一旦您从 SettingsPage
导航回来,它就消失了,您无法绑定到它。此外 - 再次导航到 SettingsPage
会产生一个新的页面实例,这也很重要 - 数据绑定要求您绑定到一个实例,在这种情况下会发生变化。
所以如果你想在两个页面之间传递一些值,你需要一些其他的机制来实现。最简单的方法是某种 static
class ,您可以在其中分配选定的颜色,或者在从第二页。但请记住,您还需要一个额外的非静态 属性 用于数据绑定,因为它不适用于 static
。这肯定不是最干净的解决方案,但它可以在更简单的场景中完成工作。
如果您有一个 MVVM 框架,如果您的导航堆栈视图模型保留在内存中,您可以更好地解决这个问题 - 例如,您可以使用事件中心或 Messenger 并使用设置接收者页面订阅的数据。 MvvmCross 和 Mvvm Light 都有能够做到这一点的解决方案。