1.更改命令空间后,g.i.cs文件无法覆盖,导致编译没法通过,可以通过设置App.xaml文件的属性中的生成操作(Build Action),实际通过改为Page后再改回ApplicationDefinition即解决了此问题。
2.获取焦点问题,如果直接用Focus()可能在第一次调用没有生效,那么可以采用另一种方式:
Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render,
new Action(() => pwdBoxPWD.Focus()));
另一个情况是,在第一次构造后(如load方法内)给某个控件focus后,后续再行调用focus就没有问题了。
3.在层级绑定的情况下,例如某个对象下的list集合中对象的字段,绑定到TextBox有可能没有触发该字段属性的值发生变更,那么可以尝试在绑定中指定UpdateSourceTrigger,具体深层次原因不清除,实测添加后就阔以了。如下:
<TextBox Text="{Binding SaleSeatNum,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay,TargetNullValue=0}" TextWrapping="NoWrap" MaxLength="10"/>
4.在调用外部硬件进行检测等情况下,考虑对调用类进行加锁,否则可能存在重复调用导致崩溃等问题。
5.界面控件while(true)时,记得在里面Sleep(1)。另外加载gif图片时,XamlAnimatedGif在部分配置一般的机器上(cpu为G3260),操作系统为win7时,可能会增加CPU负荷,导致卡顿,可以采用MediaElement方式。XamlAnimatedGif在大部分情况下更优,只是在此特种情况下可能存在CPU渲染增高后难以降下来,导致卡顿。而MediaElement多出来的一点点内存占用则影响甚微。
6.在TabItem里面的TextBox,在切换到当前Tab页时,TextBox会获取到焦点,也就是可能触发获取焦点事件逻辑,如果不想切换时默认获取到焦点,而是手动点击时获取到焦点,可以设置 TextBox的属性IsTabStop="False"。
7.使用VisualTreeHelper获取控件模板中的子控件属性,并设置该子控件属性值时,可能存在第一次获取不到的情况,原因是第一次页面未加载就去获取,而样式里面的模板是后加载的。这种情况可以在模板中绑定本控件的属性,使其关联起来,如下:
<Button x:Name="BTN_NextPage" Content="下一页" Background="#0483E5" Click="BTN_NextPage_Click" >
<Button.Template>
<ControlTemplate TargetType="Button">
<Border x:Name="img" Background="{Binding ElementName=BTN_NextPage,Path=Background}" CornerRadius="25">
<Label Content="{TemplateBinding Content}" FontFamily="微软雅黑" FontSize="22" FontWeight="Regular" Foreground="#ffffff" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="img" Property="Background" Value="#efc08b"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
此时,后台代码设置该控件的Background,就能更改其模板下面的子控件Background属性值了,即便是第一次也可以。
8.dotnetCampus.Ipc 库就包含源代码生成器,需要此场景的时候可以查看该库的使用。
9.对于部分新项目,存在Directory.Build.Props文件的,可以去掉里面的Version和AssemblyVersion,否则项目下的程序集会被统一打版本
10.使用多级模板慎重,这可能会导致IStyleConnector.Connect error报错,出现编译通过而运行有问题,绑定不了事件的情况。也要当心多级模板中,下级模板套多个TemplatedParent绑定引发问题。实测在ItemsControl.ItemTemplate –> DataTemplate
–>TemplatedParent–>TemplatedParent … – > CheckBox– > CheckBox.ControlTemplate– > ListBox–> ListBox.ControlTemplate,去掉TemplatedParent 后正确。如果最后还有一层DataTemplate
也将报错,此时网上找到一个方式,将内部模板移动到资源,例如最后是–>ListBox.ItemTemplate –> DataTemplate
,就在资源中处理这部分。