gpt4 book ai didi

c# - 有问题 - WPF + DependancyProperties

转载 作者:行者123 更新时间:2023-11-30 22:28:45 25 4
gpt4 key购买 nike

我正在尝试将双 handle slider 修改为通用双模型。

[更新]:XAML 代码:

<Slider x:Name="LowerSlider" DataContext="this" Template="{StaticResource simpleSlider}" Margin="10,0,0,0"
IsEnabled="{Binding Path=IsUpperSliderEnabled}"
Minimum="{Binding Path=Minimum}"
Maximum="{Binding Path=Maximum}"
Value="{Binding Path=LowerValue}"
SmallChange="{Binding Path=SmallChange}"
LargeChange="{Binding Path=LargeChange}" />
<Slider x:Name="UpperSlider" DataContext="this" Template="{StaticResource simpleSlider}" Margin="10,0,0,0"
IsEnabled="{Binding Path=IsUpperSliderEnabled}"
Minimum="{Binding Path=Minimum}"
Maximum="{Binding Path=Maximum}"
Value="{Binding Path=UpperValue}"
SmallChange="{Binding Path=SmallChange}"
LargeChange="{Binding Path=LargeChange}" />

C# 代码隐藏:

 #region Dependency Property - Minimum
public Double Minimum
{
get { return (Double)GetValue(MinimumProperty); }
set { SetValue(MinimumProperty, value); }
}

public static readonly DependencyProperty MinimumProperty =
DependencyProperty.Register("Minimum", typeof(Double), typeof(DualHandleSlider), new UIPropertyMetadata(0.0));
#endregion

#region Dependency Property - Lower Value
public Double LowerValue
{
get { return (Double)GetValue(LowerValueProperty); }
set { SetValue(LowerValueProperty, value); }
}

public static readonly DependencyProperty LowerValueProperty =
DependencyProperty.Register("LowerValue", typeof(Double), typeof(DualHandleSlider), new UIPropertyMetadata(0.0));
#endregion

#region Dependency Property - Upper Value
public Double UpperValue
{
get { return (Double)GetValue(UpperValueProperty); }
set { SetValue(UpperValueProperty, value); }
}

public static readonly DependencyProperty UpperValueProperty =
DependencyProperty.Register("UpperValue", typeof(Double), typeof(DualHandleSlider), new UIPropertyMetadata(5.0, new PropertyChangedCallback(OnUpperValueChanged)));

public static void OnUpperValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{

}
#endregion

#region Dependency Property - Maximum
public Double Maximum
{
get { return (Double)GetValue(MaximumProperty); }
set { SetValue(MaximumProperty, value); }
}

public static readonly DependencyProperty MaximumProperty =
DependencyProperty.Register("Maximum", typeof(Double), typeof(DualHandleSlider), new UIPropertyMetadata(10.0, new PropertyChangedCallback(OnMaximumChanged)));

public static void OnMaximumChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
DualHandleSlider slider = (DualHandleSlider)d;

if (slider.IsUpperValueLockedToMax)
{
slider.UpperValue = (Double)e.NewValue;
}
}

#endregion

#region Dependency Property - Small Change
public double SmallChange
{
get { return (double)GetValue(SmallChangeProperty); }
set { SetValue(SmallChangeProperty, value); }
}

// Using a DependencyProperty as the backing store for SmallChange. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SmallChangeProperty =
DependencyProperty.Register("SmallChange", typeof(double), typeof(DualHandleSlider),
new UIPropertyMetadata(1.0, new PropertyChangedCallback(OnSmallChangePropertyChanged)));

protected static void OnSmallChangePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
System.Diagnostics.Debug.WriteLine(e.NewValue);
}
#endregion

#region Dependency Property - Large Change

public double LargeChange
{
get { return (double)GetValue(LargeChangeProperty); }
set { SetValue(LargeChangeProperty, value); }
}

// Using a DependencyProperty as the backing store for LargeChange. This enables animation, styling, binding, etc...
public static readonly DependencyProperty LargeChangeProperty =
DependencyProperty.Register("LargeChange", typeof(double), typeof(DualHandleSlider),
new UIPropertyMetadata(1.0, new PropertyChangedCallback(OnLargeChangePropertyChanged)));

protected static void OnLargeChangePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
System.Diagnostics.Debug.WriteLine(e.NewValue);
}
#endregion

问题是,控件不会以任何方式对实现控件时设置的属性使用react。即使以编程方式编辑属性也不起作用?我认为这是一个愚蠢的错误,但我已经研究这段代码一段时间了。有什么想法吗?

编辑:仍然没有运气!输出中没有关于绑定(bind)错误的信息。

Odd behaviour!

最佳答案

在最近一次编辑之前,您已经接近初始代码。关键是命名您的用户控件 并绑定(bind)用户控件。这允许 DataContext如果你曾经支持嵌入式 ContentControl 自然流过秒。设置DataContext="this"从字面上将您的数据上下文设置为 string "this" .

而是添加类似 x:Name="ThisControl" 的内容给你的<UserControl...行,然后更新绑定(bind)以指向 ElementName=ThisControl .确保 Slider.Value绑定(bind)是 Mode=TwoWay (如果您未指定模式,则为默认模式):

<UserControl x:Class="NameSpace.ThisControl"
x:Name="ThisControl">
<Grid>
<Slider x:Name="LowerSlider"
IsEnabled="{Binding IsUpperSliderEnabled, ElementName=ThisControl}"
Minimum="{Binding Minimum, ElementName=ThisControl}"
Maximum="{Binding Maximum, ElementName=ThisControl}"
Value="{Binding LowerValue, ElementName=ThisControl}"
SmallChange="{Binding SmallChange, ElementName=ThisControl}"
LargeChange="{Binding LargeChange, ElementName=ThisControl}" />
<Slider x:Name="UpperSlider"
IsEnabled="{Binding IsUpperSliderEnabled, ElementName=ThisControl}"
Minimum="{Binding Minimum, ElementName=ThisControl}"
Maximum="{Binding Maximum, ElementName=ThisControl}"
Value="{Binding UpperValue, ElementName=ThisControl}"
SmallChange="{Binding SmallChange, ElementName=ThisControl}"
LargeChange="{Binding LargeChange, ElementName=ThisControl}" />

关于c# - 有问题 - WPF + DependancyProperties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10627058/

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