C# WPF自定义控件本身工作,但不作为另一个控件的一部分

C# WPF自定义控件本身工作,但不作为另一个控件的一部分,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,我有一个WPF自定义控件,用于显示图像 <!-- Sets the template for the data to be displayed --> <ListView.ItemTemplate> <DataTemplate> <StackPanel> <!-- Defines the ac

我有一个WPF自定义控件,用于显示图像

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
有一个列表视图,它绑定到数据库实体的可观察集合,随后通过值转换器将其转换为图像

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
当我使用WPF主机控件将该控件拖到windows窗体项目上时,在列表后面指定可观察集合时,它可以完美地工作。我已经测试了这个,它更新正确,做了一切我需要它

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
然而

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
我希望有三个这样的控件显示相关的图像,所以我创建了第二个控件,它只是将三个原始控件组合成一个堆栈面板

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
我为每个属性创建了一个更新images属性的方法

 public void ChangeSearchResults(List<ItemImage> items)
 {
      SearchResultsImageViewer.ItemImages = new ObservableCollection<ItemImage>(items);
 }
        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
然而,我根本无法得到的图像显示

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
直接查看控件和将控件视为子控件之间似乎存在差异

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
我很确定它不是winforms中的元素宿主,因为控件本身运行良好

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
有什么我没有意识到的吗

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
这是列表视图的Xaml

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
编辑-这是用户控件XAML

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
使用

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
...
Source={Binding ., Converter={StaticResource imageConverter}}" />
您绑定到当前用户控件。当您单独使用ListView时,它将绑定到包含ListView的UserControl,并将正常工作

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
如果将ListView UserControl放入另一个UserControl,则其值将绑定到其父UserControl,而不再绑定到自己的UserControl

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
试试这个:

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
转到ListView UserControl xaml.cs并将DataContext设置为自身

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
//...
DataContext = this;
//...

您是如何区分两个不同的图像控件的!!!我给了他们不同的名字?