gpt4 book ai didi

wpf - 如何绑定(bind)到渐变停止 WPF

转载 作者:行者123 更新时间:2023-12-04 02:44:14 25 4
gpt4 key购买 nike

我正在为复选框创建一个控件模板,一切顺利,但我想使用绑定(bind)到前景色的渐变。

理论上这应该可行,但结果是白色的。

<LinearGradientBrush x:Key="Shine" StartPoint="0,0" EndPoint="1,1">
<GradientStopCollection>
<GradientStop Offset="0" Color="{TemplateBinding Property=Foreground, Converter={StaticResource Color}}"/>
<GradientStop Offset="0.5" Color="White"/>
<GradientStop Offset="1" Color="{TemplateBinding Property=Foreground, Converter={StaticResource Color}}"/>
</GradientStopCollection>
</LinearGradientBrush>

ColorConverter代码是

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Dim S As SolidColorBrush = value
Return S.Color
End Function

Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Return New SolidColorBrush(value)
End Function

我猜我错过了什么,但想不通。

**这是完整的资源字典:

<ResourceDictionary>
<local:Reducer x:Key="Reducer"/>
<local:StrokeConverter x:Key="Stroke"/>
<local:VisibilityConverter x:Key="Visible"/>
<local:ColorConverter x:Key="Color"/>
<LinearGradientBrush x:Key="Green" StartPoint="0,0" EndPoint="1,1">
<GradientStopCollection>
<GradientStop Offset="0" Color="Green"/>
<GradientStop Offset="0.5" Color="White"/>
<GradientStop Offset="1" Color="Green"/>
</GradientStopCollection>
</LinearGradientBrush>
<ControlTemplate x:Key="Chk" TargetType="CheckBox">
<ControlTemplate.Resources>
<LinearGradientBrush x:Key="Shine" StartPoint="0,0" EndPoint="1,1">
<GradientStopCollection>
<GradientStop Offset="0" Color="{TemplateBinding Property=Foreground}"/>
<GradientStop Offset="0.5" Color="White"/>
<GradientStop Offset="1" Color="{TemplateBinding Property=Foreground, Converter={StaticResource Color}}"/>
</GradientStopCollection>
</LinearGradientBrush>
</ControlTemplate.Resources>
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="{Binding RelativeSource={RelativeSource Mode=Self}, Path=ActualHeight, Converter={StaticResource Stroke}, ConverterParameter=10}"
Height="{TemplateBinding Height}" Width="{TemplateBinding Height}">
<Grid Visibility="{TemplateBinding Converter={StaticResource Visible}, Property=IsChecked}" >
<Line Stroke="{StaticResource Shine}" StrokeThickness="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=ActualHeight,Converter={StaticResource Stroke}, ConverterParameter=6}" StrokeStartLineCap="Round" StrokeEndLineCap="Round"
X1="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=ActualHeight,Converter={StaticResource Reducer}, ConverterParameter=.15}"
X2="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=ActualHeight,Converter={StaticResource Reducer}, ConverterParameter=.35}"
Y1="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=ActualHeight,Converter={StaticResource Reducer}, ConverterParameter=.6}"
Y2="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=ActualHeight,Converter={StaticResource Reducer}, ConverterParameter=.85}"
/>
<Line Stroke="{StaticResource Shine}" StrokeThickness="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=ActualHeight,Converter={StaticResource Stroke},ConverterParameter=6}" StrokeStartLineCap="Round" StrokeEndLineCap="Round"
X1="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=ActualHeight, Converter={StaticResource Reducer}, ConverterParameter=.35}"
X2="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=ActualHeight, Converter={StaticResource Reducer}, ConverterParameter=.85}"
Y1="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=ActualHeight,Converter={StaticResource Reducer}, ConverterParameter=.85}"
Y2="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=ActualHeight,Converter={StaticResource Reducer}, ConverterParameter=.15}"
/>
</Grid>
</Border>
</ControlTemplate>
</ResourceDictionary>

还有转化者:

Public Class Reducer
Implements IValueConverter

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Return value * parameter
End Function

Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Return value
End Function
End Class

Public Class StrokeConverter
Implements IValueConverter

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Return value / parameter
End Function

Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Return value
End Function
End Class

Public Class VisibilityConverter
Implements IValueConverter

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Dim V As Visibility = Visibility.Visible
If value = False Then V = Visibility.Collapsed
Return V
End Function

Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Return CType(value, Visibility) = Visibility.Visible
End Function
End Class

Public Class ColorConverter
Implements IValueConverter

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Dim S As SolidColorBrush = value
Return S.Color
End Function

Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Return New SolidColorBrush(value)
End Function
End Class

最佳答案

您的绑定(bind)需要稍微修改一下:

<LinearGradientBrush x:Key="Shine" StartPoint="0,0" EndPoint="1,1">
<GradientStopCollection>
<GradientStop Offset="0" Color="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource Color}}"/>
<GradientStop Offset="0.5" Color="White"/>
<GradientStop Offset="1" Color="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource Color}}"/>
</GradientStopCollection>
</LinearGradientBrush>

乍一看,TemplateBinding 是您所需要的,这似乎是合理的,但实际上您必须绑定(bind)到 TemplatedParent 的属性才能实现您想要的结果在这里。

关于wpf - 如何绑定(bind)到渐变停止 WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19182372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com