小编stu*_*ree的帖子

如何在Value转换器中处理异常,以便可以显示自定义错误消息

我有一个文本框绑定到具有类型Timespan属性的类,并编写了一个值转换器将字符串转换为TimeSpan.

如果在文本框中输入非数字,我希望显示自定义错误消息(而不是默认的"输入字符串格式错误").

转换器代码是:

    public object ConvertBack(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        try
        {
            int minutes = System.Convert.ToInt32(value);
            return new TimeSpan(0, minutes, 0);
        }
        catch
        {
            throw new FormatException("Please enter a number");
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在XAML绑定中设置了'ValidatesOnExceptions = True'.

但是,我遇到了以下MSDN文章,它解释了为什么以上内容不起作用:

"数据绑定引擎不会捕获由用户提供的转换器抛出的异常.Rinit方法抛出的任何异常,或者Convert方法调用的方法抛出的任何未捕获的异常都被视为运行时错误"

我已经读过'ValidatesOnExceptions确实捕获TypeConverters中的异常,所以我的具体问题是:

  • 您何时可以在ValueConverter上使用TypeConverter
  • 假设TypeConverter不是上述问题的答案,我如何在UI中显示我的自定义错误消息

data-binding wpf ivalueconverter

16
推荐指数
2
解决办法
2万
查看次数

踏入.Net 4.0框架源码

我有.Net framework v4.0.30319 SP1Rel和visual studio 2010 v 10.0.40219.1 SP1Rel(取自VS中的about对话框的数据).

.Net 4.0可以在http://referencesource.microsoft.com/netframework.aspx上找到,但不确定是哪个特定版本,以及它是否与我的设置兼容.我确实下载了一两个月的源代码,但我无法进入框架源(没有源可用消息).我当时读过,似乎是由于VS的更新(可能是已安装的框架二进制文件)取代了源版本.

在我再次尝试下载之前,有人可以确认源是否符合最新版本并与之兼容.如果没有,是否有替代(可能是第三方)工具允许踩到源?

编辑:好的,刚看到这个http://social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/41388c7b-582b-4e3f-8178-3d38a3c99639,这表明你不能使用当前的源代码?

.net

11
推荐指数
1
解决办法
1197
查看次数

AdornerDecorator - 放置它们的重要性是什么?

有些像这样的xaml:

<Grid Name="grid">
        <AdornerDecorator>
        <TextBox Height="23" HorizontalAlignment="Left" Name="textBox1" Width="120" />
        </AdornerDecorator>
</Grid>
Run Code Online (Sandbox Code Playgroud)

WPF Snoop实用程序指示textBox1是AdornerDecorator的子项(正如您所期望的那样),但AdornerDecorator创建的AdornerLayer也是子项.由于添加到AdornerLayer的自定义装饰器可以显示在文本框的"外部",因此AdornerLayer的绘图表面也必须伸展到外面(大概是整个窗口).

那么,AdornerDecorator的位置具有什么真正的意义(假设我们将UI元素绑定到我们放置在AdornerLayer中的自定义装饰器)?我知道AdornerLayer.GetAdorner(textBox1)将从textbox1获取可视树中的第一个装饰层,但是它在哪里(因为自定义ardorner被添加到图层而自定义ardoner知道它绑定了哪个元素)至)?

wpf

9
推荐指数
1
解决办法
1万
查看次数

为什么要使用这个构造 - PropertyChangedEventHandler handler = this.PropertyChanged?

文章http://msdn.microsoft.com/en-us/magazine/dd419663.aspx具有以下代码示例:

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{       
    PropertyChangedEventHandler handler = this.PropertyChanged;
    if (handler != null)
    {
        var e = new PropertyChangedEventArgs(propertyName);
        handler(this, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是通过引入变量'handler'获得了什么 - 以下代码似乎工作正常:

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{   
    if (PropertyChanged!= null)
    {
        var e = new PropertyChangedEventArgs(propertyName);
        PropertyChanged(this, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# propertychanged

6
推荐指数
1
解决办法
3979
查看次数

什么时候默认转换器启动?

使用以下代码,虽然Text属性绑定到DateTime源属性,但我注意到WPF似乎自动将文本转换为DateTime,而不需要编写ValueConverter.有人可以说明这是如何完成的

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:WpfApplication1="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525"
        >    
    <StackPanel>
        <DatePicker Height="25" Name="datePicker1" Width="213" Text="{Binding Path=DueDate,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
public class P
    {
        private DateTime? dueDate = DateTime.Now;
        public DateTime? DueDate
        {
            get { return dueDate; }
            set 
            { 
                dueDate = value;
            }
        }
    }

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            P p = new P();
            this.DataContext = p;
        }
    }
Run Code Online (Sandbox Code Playgroud)

wpf converters

5
推荐指数
1
解决办法
2187
查看次数

如何从类库中的'WPF'项目App.config文件中读取值

我有一个WpfApplication项目(Visual Studio 2008),其中通过在Settings.settings文件中输入'Name'和'Value'对生成app.config(因此生成'applicationSettings'元素而不是'appSettings'元素).

我在同一个Visual Studio解决方案中添加了一个class1类库项目.

**我已经使用"添加现有项目然后添加为链接"将WpfApplication app.config文件添加到class1项目.**因为发现这是不必要的(即字符串a = ConfigurationManager.AppSettings.Get("key1") ;下面没有这个工作)

我想从class1中读取app.config中的值,并探讨了以下内容:

string s1 = Settings.Default.appsetting1; 
Run Code Online (Sandbox Code Playgroud)

但我不想从Class 1项目引用WpfApplication10项目,因此无法获得对Settings类的引用.因此,此语法仅适用于WPF项目.

string a = ConfigurationManager.AppSettings.Get("key1").ToString(); 
Run Code Online (Sandbox Code Playgroud)

这确实有效,但前提是我将以下内容添加到app.config:

<appSettings>
   <add key="key1" value="1"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

是否有其他方法可以实现我想要的更好的方法(例如提供类型安全性或能够读取Settings类属性?

app-config

0
推荐指数
1
解决办法
1万
查看次数