WPF和C#中路径格式的绑定元素

时间:2015-08-31 04:05:22

标签: c# wpf

我是一个自定义用户控件,是一种特殊类型的滑块。我可以从对象的绑定中获取较低和较高的值,如:

{Binding ElementName=slider, Path=LowerValue};
{Binding ElementName=slider, Path=UpperValue};

我想在放入Label之前重新格式化这个数字。我已经尝试将一些c#直接嵌入到我的WPF中,但我不知道如何在c#中获取值。这是我尝试过的不起作用的地方:

<![CDATA[
                double min = {Binding ElementName=slider, Path=LowerValue};
                double max = {Binding ElementName=slider, Path=UpperValue};


                if (min == 1) { label.Content = "24:00:00"; }
                else { label.Content = TimeSpan.FromHours(min).ToString(@"hh\:mm\:ss"); }

                if (max == 1) { label_Copy.Content = "24:00:00"; }
                else { label_Copy.Content = TimeSpan.FromHours(max).ToString(@"hh\:mm\:ss"); }
            ]]>
    </x:Code>

3 个答案:

答案 0 :(得分:1)

如果使用MVVM,这种事情会容易得多。创建视图模型并添加两个属性以及更新函数:

public class TestViewModel : ViewModelBase
{
    private int _TimeVal;
    public int TimeVal
    {
        get { return this._TimeVal; }
        set
        {
            this._TimeVal = value;
            RaisePropertyChanged(() => this.TimeVal);
            UpdateText();
        }
    }

    private string _TimeText;
    public string TimeText
    {
        get { return this._TimeText; }
        set { this._TimeText = value; RaisePropertyChanged(() => this.TimeText); }
    }

    public TestViewModel()
    {
        UpdateText(); // force initial value
    }

    private void UpdateText()
    {
        this.TimeText = TimeSpan.FromHours(this.TimeVal).ToString(@"hh\:mm\:ss");
    }
}

然后在您的XAML中,您只需绑定到这些属性:

<Slider Minimum="0" Maximum="100" Value="{Binding TimeVal}"/>
<TextBox Text="{Binding Path=TimeText}" />

答案 1 :(得分:1)

1.定义一个将值转换为滑块和转换器的转换器。返回格式化文本:

public class SliderToContentConverter:IValueConverter
{
  ....Convert(object value,...)
  {
     var slider =value as slider;
     if(slider!=null)
     {
      double min = slider.LowerValue;
      double max = slider.UpperValue;
      if (min == 1) 
         { return "24:00:00"; }
      else
         { return TimeSpan.FromHours(min).ToString(@"hh\:mm\:ss"); }
      if (max == 1) 
         { return "24:00:00"; }
      else {  return TimeSpan.FromHours(max).ToString(@"hh\:mm\:ss"); 
      }
     return null;
   }
}

2.使用密钥在Resources中添加转换器 3.为Label.Content添加绑定:

<Label x:name=label_copy Content={Binding ElementName=slider,Converter={StaticResource con}/>

答案 2 :(得分:-1)

<slider LowerValue={Binding lval} UpperValue={Binding uval}/>

在c#

double _lval;
double lval
{
get
{
return _lval;
}
set
{
_lval=value;
}
}

是您想要的