C# 将不透明度值绑定到静态属性;
我正在尝试制作一个桌面覆盖应用程序(想想rainmeter),因为背景可以改变,我希望能够改变应用程序中文本的一般颜色和alpha值 因此,在设置菜单中,我需要一个滑块,OnValueChanged可以在静态类中设置一个属性,很多控件都将其不透明度绑定到该属性。为了使这变得更加复杂(可能?),应用程序同时打开了多个窗口。我对装订几乎没有经验,也不能让它工作 到目前为止,我的代码是: VisualSettings.csC# 将不透明度值绑定到静态属性;,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我正在尝试制作一个桌面覆盖应用程序(想想rainmeter),因为背景可以改变,我希望能够改变应用程序中文本的一般颜色和alpha值 因此,在设置菜单中,我需要一个滑块,OnValueChanged可以在静态类中设置一个属性,很多控件都将其不透明度绑定到该属性。为了使这变得更加复杂(可能?),应用程序同时打开了多个窗口。我对装订几乎没有经验,也不能让它工作 到目前为止,我的代码是: VisualSettings.cs namespace ProjectSideBar { public
namespace ProjectSideBar
{
public class VisualSettings
{
public static double Opacity { get; set; }
}
}
MainWindow.xaml
<Window x:Class="ProjectSideBar.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:PSB="clr-namespace:ProjectSideBar"
Title="MainWindow" Height="1080" Width="300" ResizeMode="NoResize" ShowInTaskbar="False" WindowStyle="None" Closing="Window_Closing_1" Loaded="Window_Loaded" Background="Transparent" >
<Window.Resources>
<PSB:VisualSettings x:Key="VisualSettings"/>
</Window.Resources>
<Grid>
<TextBlock x:Name="ClockTB" HorizontalAlignment="Left" TextWrapping="Wrap" Text="22:22:22" VerticalAlignment="Top" Height="84" Width="300" Cursor="None" Foreground="White" FontSize="48" FontFamily="BatmanForeverAlternate" TextAlignment="Center" Opacity="{Binding Source={StaticResource VisualSettings} , Path=Opacity}" Margin="0,22,0,0" RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="1.5"/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</TextBlock.RenderTransform>
</TextBlock>
<Slider x:Name="TestSlider" HorizontalAlignment="Left" Margin="10,1052,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.5,0.611" Width="172" Foreground="#FF122268" ValueChanged="TestSlider_ValueChanged" LargeChange="0.1" SmallChange="0.01" Maximum="1" Value="0.65"/>
</Grid>
</Window>
MainWindow.xaml.cs
private void TestSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
VisualSettings.Opacity = TestSlider.Value;
}
private void TestSlider\u值已更改(对象发送方,RoutedPropertyChangedEventArgs e)
{
VisualSettings.Opacity=TestSlider.Value;
}
有人能帮我吗
好意,RoXaS您可以使用
x:static
绑定静态属性,但x:static的问题是它们不支持属性更改机制,即如果静态属性更改,它将不会在UI上更新
但是,在WPF 4.5中,您可以通过使用eventStaticPropertyChanged来支持它。您只需确保每当静态属性发生更改时,都会引发此事件,以便UI得到更新。
此外,绑定静态属性的语法与您的情况有点不同,如下所示:
"{Binding Path=(local:VisualSettings.Opacity), Mode=TwoWay}"
可以找到示例。此链接将帮助您开始。@RohitVats谢谢,非常有效。如果你加上这个作为回答,我会接受的。