wpf 学习4

1.正则表达式

1.验证数字
    ^ 为开始    $ 为结束
    1.1 一个或多个数字  0-9 重复
      Regex regex = new Regex(@"^\d+$");
      if (regex.IsMatch(size))
      {
      }
    2. 以非0开头的一个或多个数字
        Regex regex = new Regex(@"^[1-9][0-9]*$");
    3.1-9单个数字
     Regex regex = new Regex(@"^[1-9]$");

2.Trim

1.去掉左边的”0“
    string str="000101";
    str=str.TrimStart('0');

3.两个窗口的滚动条同步滚动

参考文档:

WPF:如何让两个面板共享同一个垂直滚动条,并且每个面板都拥有自己的水平滚动条? - Microsoft Q&A

WPF学习笔记(5):两个DataGrid的滚动条实现同步滚动 - 向往蓝天的菜鸟 - 博客园 (cnblogs.com)

窗口1   xaml:
 <ScrollViewer Height="200" x:Name="scv1" VerticalScrollBarVisibility="Auto">
     <StackPanel >
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
     </StackPanel>
 </ScrollViewer>、

窗口2   xaml:
 <ScrollViewer x:Name="scv2" Height="200">
     <StackPanel  >
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
         <Border Height="34" Width="200" Background="AliceBlue" Margin="10"></Border>
     </StackPanel>
 </ScrollViewer>


窗口1  cs:
//调用窗口2
public static JGTJCopy jjc = null;
 public JGTJ()
 {
     InitializeComponent();
     if (App.IsShuangPing)   
     {
         App.Screen2(new JGTJCopy());
         jjc = JGTJCopy.JJC;       
     }
     initList();  //初始化
 }

 ScrollViewer sv1, sv2;
 public void initList()
 {
     sv1 = scv1;  //获取窗口1的滚动条  
     sv2 = jjc.scv2;   //获取窗口2的滚动条  

     //下面注释的为我看别的博主写的,但我运行的时候报错,说是没有child
     //sv1 = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(this.listView1, 0), 0) as ScrollViewer;
     //sv2 = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(jjc.listView2, 0), 0) as ScrollViewer;

    //给滚动条添加事件
     sv1.ScrollChanged += new ScrollChangedEventHandler(sv1_ScrollChanged);
     sv2.ScrollChanged += new ScrollChangedEventHandler(sv2_ScrollChanged);
 }


 void sv1_ScrollChanged(object sender, ScrollChangedEventArgs e)
 {
     sv2.ScrollToVerticalOffset(sv1.VerticalOffset);
 }

 void sv2_ScrollChanged(object sender, ScrollChangedEventArgs e)
 {
     sv2.ScrollToVerticalOffset(sv2.VerticalOffset);
 }

4.修改控件模版

以combobox为例

在vs左侧的文档大纲下找到需要修改的控件,如果有给控件命名,则显示的是命名的名字

找到后右击该控件名,选择 “编辑模版”-“编辑副本”,填写名称,这个名称是后面你调用时的名称,

 选择定义位置,即选择模版代码生成在哪里。应用程序是在app.xaml里,此文档是在当前页面,资源字典则是在资源字典里

 这个背景色是combobox的背景色,如果要修改背景色,可以改这里。

 这里是调用背景色的,也就是combobox显示的文本框的样式,这是我自己又加了一个圆角

这里是下拉列表的样式,我给下拉列表加了一个最大高度,这个高度是整个下拉列表的高度

5.程序和窗口只打开一次,窗口重复打开获得焦点、

1.程序

 #region  exe程序只能运行一个
 System.Threading.Mutex mutex;
 public App()
 {
     this.Startup += new StartupEventHandler(App_Startup);
 }

 void App_Startup(object sender, StartupEventArgs e)
 {
     bool ret;
     mutex = new System.Threading.Mutex(true, "程序名称", out ret);
     if (!ret)
     {
         MessageBox.Show("程序已在运行,不能运行多个");
         Environment.Exit(0);
     }
 }
 #endregion

 2.窗口

在主界面cs:
 #region 窗口实例化
 public HYJM hyjm = null;
 #endregion


//判断是否以打开
 if (hyjm == null)
 {
     hyjm = new HYJM(this);
     App.ScreenShow(hyjm);
     if (App.IsShuangPing)
     {
         DaiJi daiji = DaiJi.daijiWindow;
         daiji.Window_Hide();
     }
 }
 else
 {
     hyjm.Activate();
 }


在HYJM界面cs里:

//弱引用MainWindow
 public static WeakReference<MainWindow> mainWindow;
public HYJM(MainWindow window)
{
    InitializeComponent();
    mainWindow = new WeakReference<MainWindow>(window);
}

//在界面关闭时,使MainWindow里的hyjm为空,为了不影响下次打开
private void Close_Click(object sender, RoutedEventArgs e)
{
    if (mainWindow.TryGetTarget(out MainWindow target))
    {
        target.hyjm = null;
    }
    this.Close();
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值