我在我的应用程序中实现了皮肤.应用程序加载其Brushes.xaml资源字典,该字典使用驻留在特定于皮肤的资源字典中的颜色.因此,根据所选皮肤,仅加载一个Color.xaml.
皮肤特异性Color.xaml
<Color x:Key="TextBoxBackgroundColor">#C4AF8D</Color>
<Color x:Key="TextBoxForegroundColor">#6B4E2C</Color>
<Color x:Key="ToolBarButtonForegroundColor">#6B4E2C</Color>
Run Code Online (Sandbox Code Playgroud)
Brushes.xaml:
<SolidColorBrush
x:Key="TextBoxBackground"
Color="{DynamicResource TextBoxBackgroundColor}" />
<SolidColorBrush
x:Key="TextBoxForeground"
Color="{DynamicResource TextBoxForegroundColor}" />
Run Code Online (Sandbox Code Playgroud)
如您所见,多种颜色(TextBoxForegroundColor和ToolBarButtonForegroundColor)是相同的.我想绕过它,因为它变得越来越混乱,特别是因为使用的颜色不能通过它们的十六进制值识别.您现在可以建议将两种颜色合并为一种,但我有一些皮肤,其中TextBoxForegroundColor与ToolBarButtonForegroundColor不同.
我想做的是这样的事情:
<Color x:Key="DarkBrown">#C4AF8D</Color>
<Color x:Key="TextBoxBackgroundColor" Color={StaticResource DarkBrown} />
<Color x:Key="ToolBarButtonForegroundColor" Color={StaticResource DarkBrown} />
Run Code Online (Sandbox Code Playgroud)
这在Xaml中是否可行?我找不到办法.
在单独的项目中定义WPF资源时,如何避免Visual Studio设计器错误?
我在复合WPF应用程序中有三个项目:主应用程序,"基础结构"库和"模块"库.主应用程序通过其输出DLL引用其他项目(项目不在一起的单个解决方案中).
我ResourceDictionary在"基础设施"库中定义了一个皮肤(一些画笔和样式).我希望主应用程序选择一个皮肤并使其可用于整个应用程序(通过MergedDictionariesApp.xaml).
在我的模块中,我想使用主应用程序加载的外观中定义的资源.如果我将资源引用为本地可用,就像这样:
Background={StaticResource MainBackgroundBrush}
Run Code Online (Sandbox Code Playgroud)
几乎一切都按预期工作.唯一的例外是Visual Studio的设计者感到困惑,并告诉我"未找到"StaticResource引用'MainBackgroundBrush'".这有效地阻止了我使用设计器.
如何ResourceDictionary在项目中定义"外观" ,在主应用程序中引用该外观,然后在模块项目中使用其资源?
发现VCL样式的故障:当您更新表单标题时,之前在同一过程中重绘的其他控件不会重新绘制,并且您被迫调用Repaint,从而丢失了重绘的宝贵处理时间.
示例:(手动设置项目选项/ vcl样式)
unit Unit11;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm11 = class(TForm)
Button1: TButton;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form11: TForm11;
implementation
{$R *.dfm}
procedure TForm11.Button1Click(Sender: TObject);
begin
Panel1.Caption := 'test';
caption := 'glitch';
end;
end.
object Form11: TForm11
Left = 0
Top = 0
Caption = 'Form11'
ClientHeight = 89
ClientWidth = 352
Color = clBtnFace
Font.Charset …Run Code Online (Sandbox Code Playgroud) 我希望我的WPF应用程序可以通过应用某个XAML模板进行换肤,并且更改应用于应用程序范围,即使对于甚至不在视觉/逻辑树中的动态控件或控件也是如此.
我可以用什么来完成这种功能?是否有任何好的资源或教程可以显示如何完成这项特定任务?
我在Delphi XE2中使用新的VCL样式系统.它工作得很好,但是我想为一个特定的表单禁用它,它上面有许多图像(一个启动/关于表单).问题是我似乎无法找到将其与特定样式相关联的表单属性,因此不能仅为该表单禁用它.似乎只有全局TStyleManager类似乎是静态的.
考虑到这一点,是否只有这样才能实现调用TStyleManager.TrySetStyle('Windows'),显示表单,然后在表单关闭时将其设置回原始样式?
我想要一个完全自定义的Dialog或PopupWindow,没有任何默认的Android UI控件(标题,背景,按钮等等).
这有可能吗?我花了几个小时寻找这个,但没有运气......看起来这应该很容易,但我找不到它.
最好是通过从XML中扩展View,但此时任何可行的东西都会很好.
谢谢.
我正在编写自己的COLLADA导入器.我已经相当远,加载网格和材料等.但我在动画方面遇到了障碍,特别是联合轮换.
我用来为我的网格蒙皮的公式是直截了当的:
weighted;
for (i = 0; i < joint_influences; i++)
{
weighted +=
joint[joint_index[i]]->parent->local_matrix *
joint[joint_index[i]]->local_matrix *
skin->inverse_bind_pose[joint_index[i]] *
position *
skin->weight[j];
}
position = weighted;
Run Code Online (Sandbox Code Playgroud)
就文献而言,这是正确的公式.现在,COLLADA为关节指定了两种类型的旋转:局部和全局.您必须将旋转连接在一起以获得关节的局部变换.
COLLADA文档没有区分的是联合的局部轮换和联合的全局轮换.但在我见过的大多数模型中,旋转可以具有rotate(全局)或jointOrient(本地)的id .
当我忽略全局旋转并仅使用本地旋转时,我得到了模型的绑定姿势.但是当我将全局旋转添加到关节的局部转换时,奇怪的事情开始发生.
这不使用全局轮换:

这是全球轮换:

在这两个截图中,我使用线条绘制骨架,但在第一个中它是不可见的,因为关节位于网格内部.在第二个屏幕截图中,顶点到处都是!
为了比较,这是第二个截图应该是这样的:

很难看到,但你可以看到第二个屏幕截图中的关节处于正确的位置.
但现在奇怪的是.如果我忽略了COLLADA指定的反向绑定姿势,而是采用关节的父本地变换的倒数乘以关节的局部变换,我得到以下结果:

在这个截图中,我从每个顶点到有影响的关节画一条线.我得到绑定姿势的事实并不那么奇怪,因为现在公式变为:
world_matrix * inverse_world_matrix * position * weight
Run Code Online (Sandbox Code Playgroud)
但它让我怀疑COLLADA的反向绑定姿势是在错误的空间.
所以我的问题是:COLLADA在什么空间指定其反向绑定姿势?如何将逆绑定姿势转换为我需要的空间?
是否有(简单)方式来自定义通过fbml实现的facebook按钮的外观?
我很确定我在某个地方看到了这个,但我不记得在哪里,我无法找到任何关于此的文档.
是否有一些标准方法可以让我的应用程序换肤?
"skinnable"是指应用程序支持多个皮肤的能力.
我不是在这里针对任何特定平台.只是想知道是否有任何使应用程序可换肤的一般指导原则.
看起来像剥离Web应用程序相对容易.桌面应用程序怎么样?