2012-06-04 3 views
1

У меня есть пользовательский UserControl с этим кодом:Исключение исключения, но я не знаю почему?

public partial class AudioControl : UserControl 
{ 
    public AudioControl() 
    { 
     InitializeComponent(); 
     Value = 0.1; 
     DataContext = this; 
    } 

    public event RoutedPropertyChangedEventHandler<double> ValueChanged = delegate { }; 

    public int TextWidth 
    { 
     get { return (int)GetValue(TextWidthProperty); } 
     set { SetValue(TextWidthProperty, value); } 
    } 

    public int SliderWidth 
    { 
     get { return (int)GetValue(SliderWidthProperty); } 
     set { SetValue(SliderWidthProperty, value); } 
    } 

    public string Header 
    { 
     get { return (string)GetValue(TextBlock.TextProperty); } 
     set { SetValue(TextBlock.TextProperty, value); } 
    } 

    //public double Value 
    //{ 
    // get { return (double)GetValue(Slider.ValueProperty); } 
    // set { SetValue(Slider.ValueProperty, value); } 
    //} 

    public double Value 
    { 
     get { 
      return (double)GetValue(ValueProperty); 
     } 
     set { 
      SetValue(ValueProperty, value); 
     } 
    } 

    public static readonly DependencyProperty ValueProperty = 
     DependencyProperty.Register("Value", typeof(double), typeof(AudioControl), new UIPropertyMetadata(0)); 

    public static readonly DependencyProperty TextWidthProperty = 
     DependencyProperty.Register("TextWidth", typeof(int), typeof(AudioControl), new UIPropertyMetadata(0)); 

    public static readonly DependencyProperty SliderWidthProperty = 
     DependencyProperty.Register("SliderWidth", typeof(int), typeof(AudioControl), new UIPropertyMetadata(0)); 

    private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
    { 
     ValueChanged(this, e); 
    } 
} 

И этот код XAML:

<UserControl x:Class="Controller.Audio.AudioControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:Audio="clr-namespace:Controller.Audio" 
     mc:Ignorable="d" 
     d:DesignHeight="23" d:DesignWidth="500" x:Name="audioControl"> 
<UserControl.Resources> 
    <Audio:DoubleToIntConverter x:Key="doubleToInt"/> 
</UserControl.Resources> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="{Binding TextWidth}"/> 
     <ColumnDefinition Width="40"/> 
     <ColumnDefinition Width="{Binding SliderWidth}"/> 
    </Grid.ColumnDefinitions> 

    <Label x:Name="txtBlock" Margin="0,0,10,0"> 
     <Binding Path="Header"/> 
    </Label> 
    <Label Grid.Column="1" Content="{Binding ElementName=slider, Path=Value, Converter={StaticResource doubleToInt}}"/> 
    <Slider x:Name="slider" Grid.Column="2" Style="{StaticResource Office2010SilverSliderStyle}" 
      Value="{Binding Path=Value, ElementName=audioControl}" Minimum="0.0" Maximum="1.0" LargeChange="0.25" TickFrequency="0.01" ValueChanged="Slider_ValueChanged"/> 
</Grid> 

Так что, если я запустить его я получаю исключение, что-то с обязательным значением является неправильным , Я также пробовал прокомментированную версию (значение-Свойство). Нет никакого исключения, но если я установил значение этого свойства, мой слайдер не изменится.

Кто-нибудь есть идеи, почему? Я никогда не делал что-то подобное :(

+3

Пожалуйста, сообщите о вашем запросе на правильность поиска. Возможно, вы получите вывод своего окна отладки или попробуйте использовать Snoop для отображения ошибки привязки. – Dominik

ответ

3

Там допущена ошибка в объявлении следующих свойств зависимостей:

public static readonly DependencyProperty ValueProperty = 
    DependencyProperty.Register("Value", typeof(double), typeof(AudioControl), new UIPropertyMetadata(0)); 

Проблема здесь состоит в том, что вы определяете свойство зависимостей, чтобы иметь типа double, но даете . это значение 0 по умолчанию, которое является int Попробуйте изменить 0 к 0.0

Я побежал код и обнаружил исключение внутреннее исключение содержит следующее сообщение:..

Тип значения по умолчанию не соответствует типу свойства «Значение».

Я изменил 0 в строке выше 0.0 и проблема ушла.

+0

+1 Одна из моих любимых ошибок WPF. – dowhilefor

+0

hmmmm звучит интересно, я попробую –

Смежные вопросы