|
Программирование >> Программирование с использованием ajax
public string Suit { get { return (string)GetValue(SuitProperty); } set { SetValue(SuitProperty, value); } public int Rank { get { return (int)GetValue(RankProperty); } set { SetValue(RankProperty, value); } public static bool ValidateSuit(object suitValue) { string suitValueString = (string)suitValue; if (suitValueString != Club && suitValueString != Diamond && suitValueString != Heart && suitValueString != Spade ) return false; return true; public static bool ValidateRank(object rankValue) { int rankValueInt = (int)rankValue; if (rankValueInt < 1 I I rankValueInt > 12) return false; return true; private void SetTextColor () { if (Suit == Club I I Suit == Spade ) { RankLabel.Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 0)); SuitLabel.Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 0)); RankLabellnverted.Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 0)); else { RankLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0)); SuitLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0)); RankLabellnverted.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0)); public static void OnSuitChanged(DependencyObject source, DependencyPropertyChangedEventArgs args) ((Card)source).SetTextColor(); 4. Измените код в Windowl .xaml следующим образом: <Window x:Class= Ch34Ex05.Windowl xmlns= http: schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x= http: schemas.microsoft.com/winfx/2006/xaml Title= Card Dealer Height= 600 Width= 800 > <Grid Name= contentGrid MouseLeftButtonDown= Grid MouseLeftButtonDown MouseLeftButtonUp= Grid MouseLeftButtonUp MouseMove= Grid MouseMove > <Grid.Background> <LinearGradientBrush EndPoint= 0.364, 0.128 StartPoint= 0.598, 1.042 > <GradientStop Color= #FF0D4FlA Offset= 0 /> <GradientStop Color= #FF448251 Offset= l /> </LinearGradientBrush> </Grid.Background> </Grid> </Window> 5. Измените код в Windowi. xaml. cs, как показано ниже: public partial class Windowi : Window { private Card currentCard; private Point offset; private Random random = new Random(); public Windowi() { InitializeComponent(); private void Grid MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (e.Source is Card) { currentCard = (Card)e.Source; offset = Mouse.GetPosition(currentCard); contentGrid.Children.Remove(currentCard); else { currentCard = new Card { Suit = Card.Suits[random.Next(0, 4)], Rank = random.Next(1, 13) currentCard.HorizontalAlignment = HorizontalAlignment.Left; currentCard.VerticalAlignment = VerticalAlignment.Top; offset = new Point (50, 75); contentGrid.Children.Add(currentCard) ; PositionCard 0; private void Grid MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { currentCard = null; private void Grid MouseMove(object sender, MouseEventArgs e) { if (currentCard != null) { PositionCard 0; private void PositionCard () { Point mousePos = Mouse.GetPosition (this); currentCard.Margin = new Thickness(mousePos.X - offset.X, mousePos.Y - offset.Y, 0, 0) ; 6. Запустите приложение. Для добавления случайных карт щелкайте на поверхности окна, а для перемещения карт щелкайте на них и перетаскивайте. При выполнении щелчка на существующей карте она должна начинать отображаться поверх всех остальных, как показано на рис. 34.19. Щ Card DMtor Рис. 34.19. Приложение Ch34Ex05 в действии Описание полученных результатов в этом примере был создан пользовательский элемент управления с двумя свойствами зависимостей, а также добавлен клиентский код для тестирования этого элемента. Он позволил охватить много базовых приемов, но начинать рассмотрение кода все равно надо с элемента управления Card. Элемент управления Card состоит в основном из кода, который должен выглядеть уже знакомо, благодаря коду, который приводился ранее в этой главе. В коде компоновки не используется ничего нового, хотя нельзя не заметить, что результат выглядит привлекательнее той неуклюжей кнопки, которая присутствовала в двух предыдущих примерах. Одной совершенно новой деталью при этом является то, что в данном элементе управления применяется немного кода для привязки данных. Привязка данных подразумевает связывание свойства элемента управления с источником данных и потому предусматривает массу различных приемов. WPF позволяет легко привязывать свойства к всевозможным источникам данных, вроде баз данных, коду XML и (как в этом примере) значений свойств зависимостей.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |