Кнопка изображения Windows Phone 7

Мне нужно создать кнопку изображения для моего приложения, например, в веб-стиле. У меня есть изображение 20x20 пикселей, и мне нужна кнопка изображения с тем же размером изображения.

Я попытался установить это внутри своего xaml, но это не сработало:

<Button Grid.Row="0" Margin="0" Padding="0" Click="AddtoFavorite_Click" Width="20" Height="20"  VerticalAlignment="Top" HorizontalAlignment="Right">
   <Button.Content>
      <Image Source="/MyNamespace;component/images/star_yellow.png" Margin="0" Width="20" Height="20" />
   </Button.Content>
</Button>

Что не так?


РЕШЕНИЕ

Я нашел лучшее решение:

<Image Source="/MyNamespace;component/images/star_yellow.png" ManipulationStarted="Image_ManipulationStarted" Width="20" Height="20"></Image> 

Спасибо всем!


person Nicola Celiento    schedule 29.11.2010    source источник
comment
Я думаю, что в этом решении есть изъян. Проблема в том, что если кто-то пролистывает представление, начиная с вашей кнопки, обычно нажатие кнопки не регистрируется. Как бы то ни было, кнопка будет считаться нажатой. Это противоречит ожиданиям пользователей от телефона и может сбивать с толку пользователей. Я думаю, вам гораздо лучше использовать кнопку, но стилизовать ее для рендеринга как изображения.   -  person Mac    schedule 11.03.2011


Ответы (7)


Я не вижу особых ошибок в вашем коде, но у меня сейчас нет инструментов, чтобы проверить его и понять, почему он не работает.

Однако вы можете создать VisualBrush со своим изображением и использовать его в качестве фона для вашей кнопки:

<Button>
    <Button.Background>
        <ImageBrush ImageSource="xyz.png"/>
    </Button.Background>
</Button>

Большинство фонов имеют тип Brush, поэтому вы можете использовать SolidColorBrush, LinearGradientBrush, ImageBrush и т. Д. Вы не ограничены цветами.

person Francesco De Vittori    schedule 29.11.2010
comment
Привет, у меня есть изображение 20x20, и я хочу, чтобы кнопка 20x20 была похожа на изображение. С опубликованным вами решением невозможно. Какие свойства мне нужно установить? Я пробовал Padding, Margin и т. д., но ничего ... - person Nicola Celiento; 29.11.2010
comment
Затем вы должны сообщить нам, что именно не работает. Имейте в виду, что в соответствии с инструкциями по пользовательскому интерфейсу минимальный размер объекта, доступного для прикосновения, составляет 26x26 с целевой площадью попадания 34x34. - person Francesco De Vittori; 29.11.2010
comment
Мой ответ позволяет вам установить любой размер кнопки, какой вы хотите. Он заменяет способ рисования кнопки, чтобы заставить ее рисовать изображение вместо стандартной кнопки. - person Mac; 09.03.2011
comment
@FrancescoDeVittori У меня такая же проблема - у меня есть изображения размером 100x100, которые я пытаюсь сопоставить с изображениями 62x62 для кнопок, и это решение сжимает их до ~ 38x38. - person Tom Kidd; 08.03.2012

Думаю, что лучшим решением будет следующее:

<Button ...>
    <Button.Template>
         <ControlTemplate>
              <Image .... />
         </ControlTemplate>
     </Button.Template>
</Button>

Использование начатой ​​манипуляции приведет к слегка нестандартному поведению. На большинстве кнопок, если вы нажмете на нее, но затем потянете за нее, нажатие кнопки не сработает. Однако, если вы используете ManipulationStarted, он немедленно сработает.

Лучший способ справиться с этими соображениями, связанными со временем разработки, - использовать Expression Blend. В blend вы можете щелкнуть правой кнопкой мыши по кнопке и отредактировать шаблон с помощью инструментов дизайна, что делает умение редактировать xaml менее важным. Научиться пользоваться Blend действительно стоит усилий.

person Mac    schedule 02.03.2011

Это старое решение, но я подумал, что предлагаю здесь то, что считал лучшим решением. Некоторые из этих решений требуют, чтобы вы заменили кнопку изображением или фон кистью изображений. Это нормально, за исключением того, что оно также окружает изображение обычным стилем кнопки, черным или белым прямоугольником (в зависимости от вашей темы).

Это решение позволяет вам использовать изображение в качестве самой кнопки, сохраняя при этом полную точность кнопки, но без необходимости создавать подкласс объекта, такого как ссылка SilverGeek.

Сначала создайте новый стиль (либо в вашем App.xaml, либо в ресурсах вашей страницы)

<Style x:Key="ImageButtonStyle" TargetType="Button">
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="Button">
            <Grid>
                <Image x:Name="StartButtonImage" Source="/Images/YourImageFile.png"/>
                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                                    Content=""/>
            </Grid>
        </ControlTemplate>
    </Setter.Value>
</Setter>

Now, just create a button anywhere using that style:

<Button Style={StaticResource ImageButtonStyle}/>

И добавьте события щелчка или что угодно еще. Кнопка примет весь стиль изображения.

person Bil Simser    schedule 05.02.2012

Может быть, вам будет интересна эта статья:

http://silvergeek.net/2011/01/14/imagebutton-control-for-win-phone-7/

person SilverGeek.net    schedule 14.01.2011

Элемент управления Button может принимать большинство элементов управления в качестве своего содержимого (а не только текста), поэтому вам не нужна «кнопка изображения» - вместо этого вам просто нужно поместить элемент управления Image внутри вашей кнопки, как это :

<Button>
    <Image Source="http://www.richmondwiki.org/images/search-button.png"></Image>
</Button>

Этот подход (в отличие от использования ImageBrush для фона кнопки) означает, что вам не нужно беспокоиться или жестко указывать размеры изображения / кнопки - WP7 сделает это за вас.

Рекомендуется использовать предоставленный элемент управления Button вместо подключения к событиям манипуляции, чтобы вам не пришлось беспокоиться о таких вещах, как наличие соответствующих полей для целей касания и т. Д.

person Henry C    schedule 01.01.2012

Вы можете установить свое изображение в качестве фона для кнопки или, если вы хотите сделать это как контент, теоретически оно должно работать внутри панели стека.

person Mick N    schedule 29.11.2010
comment
Свойство Background кнопки принимает только цвета. Вы можете прислать мне синтаксис? Спасибо. - person Nicola Celiento; 29.11.2010
comment
В этом посте вы можете увидеть как синтаксис для использования ImageBrush в качестве фона, так и ссылку на пост Питера Торра, показывающий использование StackPanel. Admitedly это было в ответ на кнопку Hyperlink и исходное сообщение Ричарда, показывающее установку изображения, поскольку контент на самом деле может работать для Button, несмотря на мои наблюдения, почему это не работало для HyperlinkButton в то время. - person Mick N; 29.11.2010

Вам даже не нужно использовать кнопку.

Вы можете подключить событие MouseLeftButtonUp к элементу управления Image.

 <Image
            Source='blue02.png'
            Width='26'
            Height='26'
            Margin='5'
            MouseLeftButtonUp='Image_MouseLeftButtonUp' />
person Walt Ritscher    schedule 30.11.2010