c# - 带有叠加项目控件的图像

标签 c# .net wpf xaml mvvm

我找到了一个示例,并且如果删除了ScrollViewer,它也很好用,但是我需要ScrollViewer内的图像。 TextBox应该是图像的叠加层。

在此示例中,图像不在ScrollViewer内。有人可以建议我如何在其中添加图像吗?

<Image Grid.Column="2" HorizontalAlignment="Center" Source="/Images/Italien.png"
       Stretch="None"/>
    <ScrollViewer Grid.Column="2" Margin="2,2,2,2" HorizontalScrollBarVisibility="Visible"
                  VerticalScrollBarVisibility="Visible">
        <ItemsControl ItemsSource="{Binding Tests}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas IsItemsHost="True"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemContainerStyle>
                <Style>
                    <Setter Property="Canvas.Left" Value="{Binding X}"/>
                    <Setter Property="Canvas.Top" Value="{Binding Y}"/>
                </Style>
            </ItemsControl.ItemContainerStyle>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBox Text="123" Foreground="Aqua" Background="Transparent"
                             FontSize="10" TextAlignment="Justify" BorderBrush="Red"
                             BorderThickness="1" Width="{Binding Width}"
                             Height="{Binding Height}"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>
</Image>

最佳答案

我不确定在这里是否理解您的要求,但是您可以将Image和ItemsControl都添加到面板(例如,网格)中,然后将面板添加到ScrollViewer中:

<ScrollViewer Grid.Column="2" Margin="2,2,2,2" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible">
    <Grid>
        <Image Grid.Column="2" HorizontalAlignment="Center" Source="/Images/Italien.png" Stretch="None"/>
        <ItemsControl ItemsSource="{Binding Tests}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas IsItemsHost="True"/>

                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemContainerStyle>
                <Style>
                    <Setter Property="Canvas.Left" Value="{Binding X}"/>
                    <Setter Property="Canvas.Top" Value="{Binding Y}"/>
                </Style>
            </ItemsControl.ItemContainerStyle>
            <ItemsControl.ItemTemplate>
                <DataTemplate>

                    <TextBox Text="123" Foreground="Aqua" Background="Transparent" FontSize="10" TextAlignment="Justify" BorderBrush="Red" BorderThickness="1" Width="{Binding Width}" Height="{Binding Height}"/>

                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
</ScrollViewer>

ScrollViewer只能有一个Child元素,因此为了能够向其中添加Image和其他元素,您需要将它们都添加到Panel中。

编辑:如果希望将Image设置为Canvas ItemsPanel的背景,则可以将Canvas的Background属性设置为ImageBrush:
<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <Canvas IsItemsHost="True">
            <Canvas.Background>
                <ImageBrush ImageSource="/Images/Italien.png" />
            </Canvas.Background>
        </Canvas>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

关于c# - 带有叠加项目控件的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41462080/

相关文章:

c# - 如何使用 LINQ 从字符串中选择标记?

c# - aspx 文件中的 If 语句

c# - Datagrid绑定(bind)问题

wpf - SQL Server CE 上的 Entity Framework 无需安装驱动程序

c# - 检查 null,== null 与 != null

javascript - 带有 ExtJS 的 ASP.NET MVC 3 返回错误的 json

c# - 在 C# 中从 WebApi 获取数据

wpf - 在 View 模型之间传递数据的正确方法是什么?

c# - 如何在 WPF 中将主窗口居中?

c# - 找出两个可无余数整除的数