1

新しい C# プロジェクトのメイン ウィンドウに Image オブジェクトを追加しました

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="150*" />
        <RowDefinition Height="161*" />
    </Grid.RowDefinitions>
    <Image Grid.RowSpan="2" Height="240" HorizontalAlignment="Left" Margin="80,26,0,0"     Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="320" DataContext="{Binding     ElementName=image1}" />
    <TextBox Grid.Row="1" Height="25" HorizontalAlignment="Left" Margin="155,119,0,0"     Name="kinectStatusTB" VerticalAlignment="Top" Width="111" Text="Disconnected" DataContext="    {Binding}" />
    <TextBlock Grid.Row="1" Height="18" HorizontalAlignment="Left" Margin="80,122,0,0"     Name="textBlock1" Text="Kinect Status" VerticalAlignment="Top" Width="69" />
    </Grid>
</Window>

そして、.cs コードのこの行で、「名前 'image1' は現在のコンテキストに存在しません」というエラーが表示されます。

 image1.Source = BitmapSource.Create(colorFrame.Width, colorFrame.Height,
                96, 96, //DPI
                PixelFormats.Bgr32, //format
                null,
                pixels, //where the data is stored
                stride);

私がこれを間違っているかどうかはわかりません.C#にはかなり慣れていません。

4

2 に答える 2

1

ImageSource を UI のプロパティにバインドしてみてください。コード ビハインドでコントロールを参照するよりも優れています。

例:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" Name="UI">
 <Grid DataContext="{Binding ElementName=UI}">
        <Grid.RowDefinitions>
            <RowDefinition Height="150*" />
            <RowDefinition Height="161*" />
        </Grid.RowDefinitions>
        <Image Source="{Binding MyImageSource}" Stretch="Fill" Grid.RowSpan="2" Width="320" Height="240" Margin="80,26,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" />
        <TextBox Grid.Row="1" Height="25" HorizontalAlignment="Left" Margin="155,119,0,0"  Name="kinectStatusTB" VerticalAlignment="Top" Width="111" Text="Disconnected" />
        <TextBlock Grid.Row="1" Height="18" HorizontalAlignment="Left" Margin="80,122,0,0"  Name="textBlock1" Text="Kinect Status" VerticalAlignment="Top" Width="69" />
    </Grid>

</Window>

コード:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    private ImageSource _myImageSource;

    public MainWindow()
    {
        InitializeComponent();
    }

    public ImageSource MyImageSource
    {
        get { return _myImageSource; }
        set { _myImageSource = value; NotifyPropertyChanged("MyImageSource"); }
    }

    private void SetImage()
    {
        // Your logic

        MyImageSource = BitmapSource.Create(colorFrame.Width, colorFrame.Height,
          96, 96, //DPI
          PixelFormats.Bgr32, //format
          null,
          pixels, //where the data is stored
          stride);
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
于 2013-02-03T02:49:33.957 に答える
1

x:Name代わりに試しましたNameか?

于 2013-02-03T09:17:34.037 に答える