2017-06-30 27 views
0

がロードされない原因の追加、私はこのビデオチュートリアル、次のWPFを学ぶには非常に単純なプロジェクトを持っている: https://www.youtube.com/watch?v=Vjldip84CXQC#WPF XAML、ComboBox_SelectionChangedは.PDBがOKエラー

すべてがOKである(そしてOKで、私はプロジェクトを意味構築されたと私はからXAMLで少しの部分を変更しようとするまで、...)を実行することができます:

<ComboBox SelectedIndex="0"> 
    <ComboBoxItem>Painted</ComboBoxItem> 
    <ComboBoxItem>Not Painted</ComboBoxItem> 
    </ComboBox> 

へ:

<ComboBox x:Name="FinishComboBox" SelectedIndex="0" SelectionChanged="FinishComboBox_SelectionChanged"> 
    <ComboBoxItem>Painted</ComboBoxItem> 
    <ComboBoxItem>Not Painted</ComboBoxItem> 
    </ComboBox> 

それから私にこのエラー "PresentationFramework.pdbがロードされていません"が表示されます。そして、不思議なことに、少なくとも私にとっては、解決策を構築することはできますが、実行することはできません。このエラーは、ソリューションを実行しようとすると発生します(たとえば、VSでF5を押すなど)。

enter image description here

そして、私は戻ってXAMLを変更した場合ので、はい、それは本当に、XAMLの変更によって引き起こされる:

<!--<ComboBox x:Name="FinishComboBox" SelectedIndex="0" SelectionChanged="FinishComboBox_SelectionChanged">--> 
    <ComboBox SelectedIndex="0"> 
    <ComboBoxItem>Painted</ComboBoxItem> 
    <ComboBoxItem>Not Painted</ComboBoxItem> 
    </ComboBox> 

それは、清潔で正常に動作しています。だから私の質問は明らかになぜこれですか

で提案されているように私はいくつかの解決策を試してみました:

が含まれていること:

  1. スタートアッププロジェクトフォルダから削除binとOBJフォルダや再構築を解答
  2. PresentationFrameworkへの参照を削除してから、アプリケーションフレームワークのターゲットを変更し、PresentationFrameworkリファレンスを再度追加するか、またはいくつかのデバッグオプションを変更して、プロジェクトをきれいにして再構築します。
  3. デバッグ - >オプション - >デバッグ - >全般の設定を変更し、元のバージョンと完全に一致するようにソースファイルを要求するチェックボックスをオフにします。
  4. デバッグ - >オプション - >デバッグ - "すべてのモジュール、除外されない限り"
  5. いくつかの他のささい...

しかし、何も動作のために>記号。他の解決策?ここで

は私の完全なコードです:

C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace WpfBasics { 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window { 
    public MainWindow() { 
     InitializeComponent(); 
    } 

    private void ApplyButton_Click(object sender, RoutedEventArgs e) { 
     MessageBox.Show($"The description is: {DescriptionText.Text}"); //See how crazy C# is when making things easy for string printing AND it can handle null!! 
    } 

    private void ResetButton_Click(object sender, RoutedEventArgs e) { 
     WeldCheckBox.IsChecked = AssemblyCheckBox.IsChecked = PlasmaCheckBox.IsChecked = LaserCheckBox.IsChecked = PurchaseCheckBox.IsChecked = 
     LatheCheckBox.IsChecked = DrillCheckBox.IsChecked = FoldCheckBox.IsChecked = RollCheckBox.IsChecked = SawCheckBox.IsChecked = false; 
    } 

    private void CheckBox_Checked(object sender, RoutedEventArgs e) { 
     int length = string.IsNullOrWhiteSpace(LengthText.Text) ? 0 : int.Parse(LengthText.Text); 
     length += ((CheckBox)sender).Content.ToString().Length; 
     LengthText.Text = length.ToString(); 
    } 

    private void CheckBox_Unchecked(object sender, RoutedEventArgs e) { 
     int length = string.IsNullOrWhiteSpace(LengthText.Text) ? 0 : int.Parse(LengthText.Text); 
     length -= ((CheckBox)sender).Content.ToString().Length; 
     LengthText.Text = length.ToString(); 
    } 

    private void FinishComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { 
     var comboBox = (ComboBox)sender; 
     var value = (ComboBoxItem)comboBox.SelectedValue; 
     NoteText.Text = (string)value.Content; 
    } 
    } 
} 

XAML

<Window x:Class="WpfBasics.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfBasics" 
     mc:Ignorable="d" 
     Title="WPF Basics v1.0" Height="800" Width="400"> 

    <Border Padding="10"> 
    <StackPanel> 
     <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Button x:Name="ApplyButton" Click="ApplyButton_Click" Margin="0 0 10 0" Grid.Column="0" Content="Apply"/> 
     <Button x:Name="ResetButton" Click="ResetButton_Click" Margin="0 0 0 0" Grid.Column="1" Content="Reset"/> 
     <Button Margin="10 0 0 0" Grid.Column="2" Content="Refresh"/> 
     </Grid> 

     <!--Margin shorthand 0 10 means left-right = 0, top bottom = 10--> 
     <!--Pulse Properties--> 
     <TextBlock Text="Pulse Properties" FontWeight="Bold" Margin="0 10"/> 

     <!--Description--> 
     <TextBlock Text="Description"/> 
     <TextBox x:Name="DescriptionText" Padding="2" /> 

     <!--Status and Revision--> 
     <Grid Margin="0 5 0 0"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="2*"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 

     <StackPanel Grid.Column="0" Margin="0 0 10 0"> 
      <TextBlock Text="Status"/> 
      <TextBox Padding="2" IsReadOnly="True" Background="#eeeeee"/> 
     </StackPanel> 

     <StackPanel Grid.Column="1"> 
      <TextBlock Text="Revision"/> 
      <TextBox Padding="2" IsReadOnly="True" Background="#eeeeee"/> 
     </StackPanel> 

     </Grid> 

     <!--Part Number--> 
     <TextBlock Text="Part Number" Margin="0 5 0 0"/> 
     <TextBox Padding="2" IsReadOnly="True" Background="#eeeeee"/> 

     <!--Raw Material--> 
     <TextBlock Text="Raw Material" FontWeight="Bold" Margin="0 10"/> 

     <!--Material--> 
     <TextBlock Text="Material"/> 
     <ComboBox /> 

     <!--Manufacturing Info--> 
     <TextBlock Text="Manufacturing Info" FontWeight="Bold" Margin="0 10"/> 

     <!--Work Centres--> 
     <TextBlock Text="Work Centres"/> 

     <!--Checkboxes--> 
     <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 

     <StackPanel Grid.Column="0" Margin="0 0 10 0"> 
      <CheckBox Unchecked="CheckBox_Unchecked" Checked="CheckBox_Checked" x:Name="WeldCheckBox" Content="Weld"/> 
      <CheckBox Unchecked="CheckBox_Unchecked" Checked="CheckBox_Checked" x:Name="AssemblyCheckBox" Content="Assembly"/> 
      <CheckBox Unchecked="CheckBox_Unchecked" Checked="CheckBox_Checked" x:Name="PlasmaCheckBox" Content="Plasma"/> 
      <CheckBox Unchecked="CheckBox_Unchecked" Checked="CheckBox_Checked" x:Name="LaserCheckBox" Content="Laser"/> 
      <CheckBox Unchecked="CheckBox_Unchecked" Checked="CheckBox_Checked" x:Name="PurchaseCheckBox" Content="Purchase"/> 
     </StackPanel> 

     <StackPanel Grid.Column="1"> 
      <CheckBox Unchecked="CheckBox_Unchecked" Checked="CheckBox_Checked" x:Name="LatheCheckBox" Content="Lathe"/> 
      <CheckBox Unchecked="CheckBox_Unchecked" Checked="CheckBox_Checked" x:Name="DrillCheckBox" Content="Drill"/> 
      <CheckBox Unchecked="CheckBox_Unchecked" Checked="CheckBox_Checked" x:Name="FoldCheckBox" Content="Fold"/> 
      <CheckBox Unchecked="CheckBox_Unchecked" Checked="CheckBox_Checked" x:Name="RollCheckBox" Content="Roll"/> 
      <CheckBox Unchecked="CheckBox_Unchecked" Checked="CheckBox_Checked" x:Name="SawCheckBox" Content="Saw"/> 
     </StackPanel> 
     </Grid> 

     <!--Length--> 
     <TextBlock Text="Length" Margin="0 5 0 0"/> 
     <TextBox x:Name="LengthText" Padding="2"/> 

     <!--Mass--> 
     <TextBlock Text="Mass" Margin="0 5 0 0"/> 
     <TextBox x:Name="MassText" Padding="2" IsReadOnly="True" Background="#eeeeee"/> 

     <!--Finish--> 
     <TextBlock Text="Finish" Margin="0 5 0 0"/> 
     <ComboBox x:Name="FinishComboBox" SelectedIndex="0" SelectionChanged="FinishComboBox_SelectionChanged"> 
     <!--ok if I use the code below--> 
     <!--<ComboBox SelectedIndex="0">--> 
     <ComboBoxItem>Painted</ComboBoxItem> 
     <ComboBoxItem>Not Painted</ComboBoxItem> 
     </ComboBox> 

     <!--Purchase Information--> 
     <TextBlock Text="Purchase Information" Margin="0 5 0 0"/> 
     <ComboBox SelectedIndex="0"> 
     <ComboBoxItem>Rubber</ComboBoxItem> 
     <ComboBoxItem>Not Rubber</ComboBoxItem> 
     </ComboBox> 

     <!--Supplier Name--> 
     <TextBlock Text="Supplier Name" Margin="0 5 0 0"/> 
     <TextBox Padding="2"/> 

     <!--Supplier Code--> 
     <TextBlock Text="Supplier Code" Margin="0 5 0 0"/> 
     <TextBox Padding="2"/> 

     <!--Additional Information--> 
     <TextBlock Text="Additional Information" FontWeight="Bold" Margin="0 10"/> 

     <!--Note--> 
     <TextBlock Text="Note"/> 
     <TextBox x:Name="NoteText" Padding="2"/> 

    </StackPanel> 
    </Border> 
</Window> 
+0

ちょっとメモ(WPFを学びたいからです)。あなたのコードは生成されたフィールドを使用していないので、 'x:Name =" FinishComboBox "'を設定する必要はありません。 – Clemens

+1

別の注意として、 'SelectedValuePath'との組み合わせで動作するようになっている' SelectedValue'ではなく、 'SelectedItem'プロパティによってComboBoxの選択項目にアクセスする必要があります。 – Clemens

+1

次のステップは、これらすべてのイベントハンドラを取り除き、MVVMを使用する方法を学ぶことです。 1.ビューモデルクラスを作成します。 2. VMのインスタンスをウィンドウのDataContextプロパティに割り当てます。 3. ItemsSourceプロパティを、文字列のコレクションであるVMプロパティにバインドします。 4. ComboBoxのSelectedItemを、VM内の選択した項目プロパティにバインドします。 5. TextBlockのTextを同じプロパティにバインドします。 – Clemens

答えて

2

事は、あなたが "のにNoteText" しばらくのテキストを設定しようということであり、コントロールを初期化します。しかし、あなたの「NoteText」は実際にはまだ読み込まれていません。解決策は、SelectedIndexをXAMLから削除し、InitializeComponentの後にインデックス0を選択することです。

public MainWindow() 
    { 
     InitializeComponent(); 
     FinishComboBox.SelectedIndex = 0; 
    } 
+0

おそらく最もクリーンな解決策ではないが、少なくとも機能するはずです。 –

+0

あなたは絶対に正しいです!ああ、どのようにして.pdbがロードされないエラーを生成する可能性がありますか?これについても説明できますか?とにかくありがとう! – Ian

+0

そして、私はあなたが示したようにまったくやりませんでした。代わりに、私は、 'InitialLoaded'フラグを持っていて、' InitializeComponent'が完全にロードされていなければ、フラグは 'false'になり、falseである限り' SelectionChanged'イベントは直ちに 'return'になります。 – Ian