Windows应用程序,具有可单击的图像的不同部分

时间:2015-03-31 12:56:56

标签: c# xaml windows-applications imagemap

我有一个大图像,用户可以(水平地)滚动浏览。我想使图像的某些部分可滚动。任何人都可以指出我最好的方法吗?我想知道Expression Blend是否是实现这一目标的好工具。 Haven根本找不到任何关于此的文件。

其他细节: 墙上有一幅图像(水平可滚动),上面有各种画作。当用户水平滚动时,显示包含更多绘画的墙壁的其余部分。我希望用户点击每个绘画以显示有关该绘画的信息。

非常感谢任何帮助,谢谢!

更新:

Windows应用程序是用C#编写的,下面是XAML:

<Page
    x:Class="ProjectName.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:McCannWallHistory"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid  Name="gMain" Background="White">
        <StackPanel Orientation="Vertical" PointerMoved="OnPointerMoved" Name="spMain">
            <TextBlock Name="McCann" Text="McCann" HorizontalAlignment="Center" FontSize="60" Foreground="Black" FontWeight="Bold" FontFamily="/fonts/FuturaStd-Bold.otf#Futura Std Book" Margin="0, 40,0,0"></TextBlock>
            <TextBlock Name="NY" Text="McCann" HorizontalAlignment="Center" FontSize="34" Foreground="Black" FontWeight="Normal" FontFamily="/fonts/Futura-Medium.ttf#FuturaStdBook" Margin="0, 0,0,15"></TextBlock>

            <StackPanel>
                <ScrollViewer ZoomMode="Disabled" Name="svMain" VerticalScrollBarVisibility="Hidden" VerticalScrollMode="Disabled" VerticalAlignment="Bottom"
                              HorizontalScrollBarVisibility="Hidden" HorizontalScrollMode="Enabled">
                    <Image Name="imgMain" Source="assets/Wall.jpg" Height="816" Width="4828.00"></Image>
                </ScrollViewer>
            </StackPanel>
            <TextBlock Name="txt"></TextBlock>
        </StackPanel>

    </Grid>
</Page>

下面是C#代码,我在其中创建一个透明矩形,围绕图像中的单个区域并使其可点击&#34;但是当用户滚动该区域时,该区域仍然存在并且&#34;错误&# 34;部分是&#34;可点击的&#34;。

public MainPage()
        {

            this.InitializeComponent();
            //Centering the scrollViewer Horizontally
            var period = TimeSpan.FromMilliseconds(10);
            Windows.System.Threading.ThreadPoolTimer.CreateTimer(async (source) =>
            {
                await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                {
                    var Succes = svMain.ChangeView(1615, null, null);
                });
            }, period);

            //Setting a clickable rectangle over a section of the image
            Rectangle r = new Rectangle();
            r.Tag = "Sample Tag Info";
            r.Stroke = new SolidColorBrush(Colors.Red);
            r.Fill = new SolidColorBrush(Colors.Red);
            r.Clip = new RectangleGeometry();
            r.Clip.Rect = new Rect(292, 140, 365, 192);
            gMain.Children.Add(r);

        }

0 个答案:

没有答案