powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Переопределить одно значение в шаблоне как?
5 сообщений из 5, страница 1 из 1
Переопределить одно значение в шаблоне как?
    #38060931
Всем привет.

Построил 2 кнопки двух видов Expression Blend, теперь пытаюсь оптимизировать "напильником". Одна кнопка такая:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<Style x:Key="VioletKey" TargetType="{x:Type Button}">
  <Setter Property="Control.Foreground" Value="White" />
  <Setter Property="Control.FontFamily" Value="./MagistralBlackC.otf#MagistralBlackC" />
  <Setter Property="Template">
  <Setter.Value>
    <ControlTemplate TargetType="{x:Type Button}">
    <Grid x:Name="grid" RenderTransformOrigin="0.5,0.5">
      <Image x:Name="image" Source="{StaticResource VioletKeyPicture}" Stretch="Fill" RenderTransformOrigin="0.5,0.5" OpacityMask="Black">
        <Image.Effect>
           <DropShadowEffect Opacity="0.7" ShadowDepth="6" RenderingBias="Quality"/>
        </Image.Effect>
      </Image>
      <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
<Grid.RenderTransform><TransformGroup><ScaleTransform/><SkewTransform/><RotateTransform/><TranslateTransform/></TransformGroup></Grid.RenderTransform>
      </Grid>
      <ControlTemplate.Triggers>
      <Trigger Property="IsPressed" Value="True">
        <Trigger.ExitActions>
           <BeginStoryboard  Storyboard="{StaticResource StoryboardUnPress}"/>
        </Trigger.ExitActions>
        <Trigger.EnterActions>
          <BeginStoryboard Storyboard="{StaticResource StoryboardPress}"/>
        </Trigger.EnterActions>
      </Trigger>
    </ControlTemplate.Triggers>
  </ControlTemplate>
</Setter.Value>
</Setter>
</Style>



Кнопка второго вида точно такая же по шрифту, поведению и т.д., но использует другой рисунок. Написал такое:

Код: xml
1.
2.
3.
<Style x:Key="YellowKey" TargetType="{x:Type Button}" BasedOn="{StaticResource VioletKey}">
   <!-- Переопределить только image. Как??? -->
</Style>



А как дальше - не знаю.
Как мне можно переопределить только вот это
<Image x:Name="image" Source="{StaticResource VioletKeyPicture}" ...
Не повторяя заново всего остального? Как тут делается это наследование (если можно так назвать его)?
...
Рейтинг: 0 / 0
Переопределить одно значение в шаблоне как?
    #38061469
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задавайте разницу во viewModel-и - и всё. Определяйте там ресурсы, имена картинок - что угодно.

Да хоть сам UserControl держите во viewModel-и и показывайте его через ContentPresenter.
...
Рейтинг: 0 / 0
Переопределить одно значение в шаблоне как?
    #38061470
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А наследование "тут" делается почти как обычно, только не для этого оно используется.
...
Рейтинг: 0 / 0
Переопределить одно значение в шаблоне как?
    #38061515
Мне бы примерчик какой-нибудь.
Я просто пока эти умные слова не очень понимаю, а по примеру может и разобрался бы.
Книжки тоже пытаюсь читать, но пока в голове полная каша. По полочкам не разлеглось.
...
Рейтинг: 0 / 0
Переопределить одно значение в шаблоне как?
    #38062054
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.ComponentModel;

namespace WpfApplication1
{
	/// <summary>
	/// Interaction logic for MainWindow.xaml
	/// </summary>
	public partial class MainWindow : Window
	{
		public MainWindow()
		{
			this.InitializeComponent();

			// Insert code required on object creation below this point.

            this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
		}

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            redButton.DataContext = new viewModelForButton(App.Current.Resources["redGradient"] as GradientBrush);
            blueButton.DataContext = new viewModelForButton(App.Current.Resources["blueGradient"] as GradientBrush);
        }

        
	}

    class viewModelForButton : INotifyPropertyChanged
    {
        private System.Windows.Media.GradientBrush gradientBrush;

        public System.Windows.Media.GradientBrush GradientBrush
        {
            get { return gradientBrush; }
            set
            {
                gradientBrush = value;
                onPropertyChanged("GradientBrush");
            }
        }

        public viewModelForButton(System.Windows.Media.GradientBrush gradientBrush)
        {
            // TODO: Complete member initialization
            this.gradientBrush = gradientBrush;
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void onPropertyChanged(String nameOfProp)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(nameOfProp));
        }
    }
}




Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<Window
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	x:Class="WpfApplication1.MainWindow"
	x:Name="Window"
	Title="MainWindow"
	Width="640" Height="480">

	<Grid x:Name="LayoutRoot">
		<Button x:Name="redButton" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Background="{Binding GradientBrush}"/>
		<Button x:Name="blueButton" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="0,25.96,0,0" Background="{Binding GradientBrush}"/>
	</Grid>
</Window>



Кнопки, как видишь, совершенно одинаковые, но разного цвета.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Переопределить одно значение в шаблоне как?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]