C#WPF在Canvas上选择UserControl

时间:2011-04-04 13:28:18

标签: c# wpf mvvm canvas itemscontrol

我有一个带有自定义UserControls的Canvas。现在我希望能够选择它们,因为我想要一个属性框来显示有关该特定项目的信息。当我点击Canvas中的UserControl时,可以将 SelectedItem 属性设置为该用户控件的viewmodel或其他更好的东西。我不知道如何做得好,也没有成功地使它以任何方式工作,为什么我在这里问。

目前我有一个DocumentViewModel,它包含有关打开的文档/项目的信息。在这个视图模型中,我有一个组件列表,它们是在画布上表示的组件。这看起来像这样:

public class DocumentViewModel : BaseViewModel
{
        private ObservableCollection<ComponentViewModel> components;
        public ObservableCollection<ComponentViewModel> Components
        {
            get { return components; }
        }

        private string filePath;
        public string FilePath
        {
            get { return filePath; }
            set { filePath = value; }
        }

    ...
}

然后我有一个DataTemplate来了解DocumentViewModel在View中的外观。这看起来像这样:

<DataTemplate DataType="{x:Type ViewModels:DocumentViewModel}">
        <DataTemplate.Resources>
            <Converters:GuiSizeConverter x:Key="SizeConverter"/>
        </DataTemplate.Resources>
        <ItemsControl ItemsSource="{Binding Components}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas ClipToBounds="True" Height="{Binding CurrentProject.Height, Converter={StaticResource SizeConverter}}"
                            Width="{Binding CurrentProject.Width, Converter={StaticResource SizeConverter}}" 
                            HorizontalAlignment="Left" VerticalAlignment="Top">
                        <Canvas.Background>
                            <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.WindowFrameColorKey}}"/>
                        </Canvas.Background>
                    </Canvas>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemContainerStyle>
                <Style>
                    <Setter Property="Utils:DraggableExtender.CanDrag" Value="True" />
                    <Setter Property="Canvas.Top" Value="{Binding Path=Y, Converter={StaticResource SizeConverter},Mode=TwoWay}" />
                    <Setter Property="Canvas.Left" Value="{Binding Path=X, Converter={StaticResource SizeConverter},Mode=TwoWay}" />
                </Style>
            </ItemsControl.ItemContainerStyle>
        </ItemsControl>
    </DataTemplate>

ComponentViewModel是我的组件ViewModels的基类,它是我的Model对象的简单包装器。我使用DataTemplates将它们绑定到View,因此没什么特别的。

那么有没有人对如何使这些控件可点击有任何好的建议,这样我就可以检测出哪一个被选中,这样我就可以将它绑定到属性框了?

1 个答案:

答案 0 :(得分:1)

不使用ItemsControl,而只使用具有选择权的ListBox