• DependencyProperty


    <Window x:Class="DependencyPropertyDemo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="DrawShape" Height="350" Width="525">
    <Grid>
    <StackPanel>
    <TextBox TextChanged="TextBox_TextChanged" Name="input">0</TextBox>
    <Grid>
    <Polygon Name="poly" Stroke="Black" Fill="Red"/>
    </Grid>
    </StackPanel>
    </Grid>
    </Window>

    using System;
    using System.Collections.Generic;
    using System.Linq;
    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.Navigation;
    using System.Windows.Shapes;

    namespace DependencyPropertyDemo
    {
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
    public static readonly DependencyProperty SidesProperty;

    public int Sides
    {
    get { return (int)GetValue(SidesProperty); }
    set { SetValue(SidesProperty,value);}
    }
    static MainWindow()
    {
    FrameworkPropertyMetadata md = new FrameworkPropertyMetadata();
    md.PropertyChangedCallback = OnSidesChanged;
    SidesProperty = DependencyProperty.Register("Sides", typeof(int), typeof(MainWindow), md);
    }
    public MainWindow()
    {
    InitializeComponent();
    }

    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
    int sideCount;
    bool success = int.TryParse(input.Text, out sideCount);
    if (success && sideCount > 2)
    {
    Sides = sideCount;
    }
    }
    static void OnSidesChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
    MainWindow win = obj as MainWindow;
    if (win == null || win.poly == null) return;

    const int xCenter = 65;
    const int yCenter = 50;
    const int radius = 40;
    double rds = Math.PI / win.Sides * 2;

    win.poly.Points.Clear();
    win.poly.Points.Add(new Point(xCenter+radius,yCenter));
    for (double i = 1; i <= win.Sides - 1; i++)
    {
    double x = (Math.Cos(rds * i) * radius) + xCenter;
    double y = (Math.Sin(rds * i) * radius) + yCenter;
    win.poly.Points.Add(new Point(x, y));
    }
    }
    }
    }

  • 相关阅读:
    Foj1675数论
    JSTL与EL之间的千丝万缕
    2013多校联合2 I Warm up 2(hdu 4619)
    ios视图切换之push与present混用
    Ruby设计模式透析之 —— 适配器(Adapter)
    晓说智能指针shared_ptr为何可以实现跨模块分配和释放内存
    CSS的力量
    MySQL-select 1;
    MySQL数据库-语言简介
    Eclipse开发工具提交代码
  • 原文地址:https://www.cnblogs.com/runningRain/p/5771096.html
Copyright © 2020-2023  润新知