当我查看Windows 8安装的开始屏幕时,我看到捆绑的应用程序的颜色来自某些标准(?)调色板:IE和Weather具有相同的颜色,Store和Xbox Live游戏,人物和音乐,消息和地图等看起来大多数这些应用程序之间没有任何逻辑连接.然而,他们的瓷砖共享颜色很可能来自一些标准化的调色板
但是当我们在Visual Studio中创建Metro应用程序时,背景颜色在自由格式文本字段中预设为#464646.所以我想知道是否有一些"官方"的预定义颜色列表,我们可以使用它来使我们自己的磁贴"原生"到Windows 8?
显然我可以截取屏幕并从捆绑的瓷砖中选择一种颜色,但必须有更好的方法,到目前为止我找不到它.
编辑:显然你甚至无法从截图中选择颜色,因为操作系统会自动将渐变应用于它:
如果您在图像中使徽标周围的空间透明,则应用程序的品牌颜色(在清单中声明)将显示为预先应用的渐变,作为Windows 8 Release Preview外观的一部分. http://msdn.microsoft.com/en-us/library/windows/apps/hh465403.aspx#using_default_tiles
在我的自定义WPF控件中,我想获得一个包含Window或Page.当控件在窗口化的应用程序中时,Window.GetWindow()方法工作正常但是当它在浏览器中的XBAP应用程序中时,它返回浏览器窗口而不是页面.
有没有其他方法可以做到这一点?
我有2个相关的数据库表,简化形式看起来像这样
Product(
product_id,
name
)
ProductSpecs(
spec_id,
product_id,
name,
value
)
Run Code Online (Sandbox Code Playgroud)
外键通过product_id字段设置,ProductSpecs表对(product_id,name)对具有唯一约束.
现在在我的ASP.NET MVC应用程序中,当用户编辑产品规格并保存数据时,我删除了旧的规范并将所有规范作为新规格插入.
我首先调用DataContext.DeleteAllOnSubmit()并提供当前(旧)ProductSpecs作为参数,然后将新规范添加到Product.ProductSpecs集合中.
然后我调用DataContext.SubmitChanges()并得到一个错误,我的唯一约束被违反了.
通过查看DataContenxt.GetChangeText()返回的SQL语句,我可以看到INSERT在DELETE之前执行(即使我在Add之前调用了DeleteAllOnSubmit()).
这种行为的原因是什么以及如何修复或解决它?
谢谢.
假设我需要在WPF控件上设置不透明蒙板,在高精度位置突出显示它的一部分(假设位于(50; 50)位置的50x50平方).为此,我创建了一个包含2个GeometryDrawing对象的DrawingGroup:1个半透明矩形用于控件的整个实际大小,1个不透明矩形用于突出显示的区域.然后我从这个DrawingGroup创建一个DrawingBrush,将它的Stretch属性设置为None,并将此画笔设置为需要屏蔽的控件的OpacityMask.
所有这一切都很好,而没有任何东西"坚持"超出所述控制的范围.但是如果控制在界限之外绘制某些东西,则外部点将成为应用不透明蒙版的起点(如果画笔与该侧对齐)并且整个蒙版移动该距离会导致意外行为.
我似乎无法找到一种方法来强制从控件的边界应用蒙版或至少获得控件的实际边界(包括粘贴部分),这样我就可以相应地调整我的蒙版.
任何想法高度赞赏!
更新:这是一个简单的测试用例XAML和截图,展示了这个问题:
我们在最后一个中有2个嵌套的Borders和Canvas,带有上面提到的方块:
<Border Padding="20" Background="DarkGray" Width="240" Height="240">
<Border Background="LightBlue">
<Canvas>
<Rectangle Canvas.Left="50" Canvas.Top="50" Width="50" Height="50"
Stroke="Red" StrokeThickness="2"
Fill="White"
/>
</Canvas>
</Border>
</Border>
Run Code Online (Sandbox Code Playgroud)
以下是它的外观:
没有面具http://devblog.ailon.org/devblog/_stuff/maskissue/square-no-mask.gif
现在我们将OpacityMask添加到第二个边框,这样除了我们的方块之外,它的每个部分都是半透明的:
<Border.OpacityMask>
<DrawingBrush Stretch="None" AlignmentX="Left" AlignmentY="Top">
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="#30000000">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0,0,200,200" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="Black">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="50,50,50,50" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Border.OpacityMask>
Run Code Online (Sandbox Code Playgroud)
一切看起来都像预期的那样
蒙面的http://devblog.ailon.org/devblog/_stuff/maskissue/square-mask.gif
现在我们在画布上添加一条线,在我们的边框左侧粘贴10个像素:
<Line X1="-10" Y1="150" X2="120" Y2="150"
Stroke="Red" StrokeThickness="2"
/>
Run Code Online (Sandbox Code Playgroud)
并且掩码向左移动10个像素:
转移掩码http://devblog.ailon.org/devblog/_stuff/maskissue/square-line-mask.gif
Update2:作为一种解决方法,我在边界外添加一个可笑的大透明矩形并相应地调整我的面具,但这是一个非常讨厌的解决方法.
Update3:注意:带有矩形和直线的画布就像某个对象的例子一样,它有一些超出界限的对象.在此示例的上下文中,它应被视为某种黑盒子.您无法更改其属性来解决一般问题.这与移动线条相同,因此不会突出.
假设我有一个简单的布局,例如:
<StackPanel>
<TextBlock Text="{Binding Path=Title}" />
<TextBlock Text="{Binding Path=ShortDescription}" />
<TextBlock Text="{Binding Path=LongDescription}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
现在,当我将ShortDescription设置为null或清空字符串时,仍然存在第二个TextBlock的间隙.是否有一些属性可以防止空文本块占用空间?或者我应该使用其他控制?
谢谢.
我花了大部分时间使用相同的代码库为WPF和Silverlight开发控件.为此,我将现有文件从一个项目(比如说Silverlight)添加到另一个项目(比如WPF).对于微小的差异,我使用预处理器指令,如
#if SILVERLIGHT
...
#else
...
#endif
Run Code Online (Sandbox Code Playgroud)
这些块中的代码将显示为灰色,具体取决于您打开文件的项目类型.因此,如果您从Silverlight项目(其中定义了SILVERLIGHT)打开文件,则else部分为灰色,而Intellisense不起作用.
为了使IDE处理WPF部分(具有着色和智能感知支持),您需要从WPF项目中打开该文件.当您尝试这样做时,会出现一个消息框,指出"此文档由另一个项目打开",当您单击"确定"时,它会在Silverlight项目的上下文中显示该文件(而不是我想看到的内容).所以我必须关闭文件,再次导航到WPF项目并再次打开文件.这非常非常烦人.
所以问题是:是否存在某种设置或附加组件,这将使Visual Studio重新打开项目中的文件,我双击它而不是显示那个愚蠢的消息框并向我显示该文件"项目?
在调查我正在处理的应用程序的问题时,我遇到了一个我不太了解的行为.看起来当你有一个TextBox(例如)带有绑定的Text属性时,系统会比你有一个静态文本时多接受一次布局传递.
请问任何人,解释为什么会发生这个额外的通行证?引擎是否先放置未绑定的控件然后将其绑定然后再次放置它?
为了测试这个我构建了这样的测试用例:
我已经声明了一个继承自TextBox的类(所以我可以覆盖ArrangeOverride):
public class MultiBoundTextBox : TextBox
{
protected override Size ArrangeOverride(Size arrangeBounds)
{
Console.WriteLine("TextBox.Arrange");
return base.ArrangeOverride(arrangeBounds);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在窗口中放置了这个文本框的实例:
<local:MultiBoundTextBox x:Name="tb">
Some text
</local:MultiBoundTextBox>
Run Code Online (Sandbox Code Playgroud)
并为测试窗口添加了一些代码:
public Window11()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Console.WriteLine("Window.Loaded");
}
protected override Size ArrangeOverride(Size arrangeBounds)
{
Console.WriteLine("Window.Arrange");
return base.ArrangeOverride(arrangeBounds);
}
private void Window_Initialized(object sender, EventArgs e)
{
Console.WriteLine("Window.Initialized");
tb.DataContext = DateTime.Now;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我运行这个时,我得到了这个输出:
Window.Initialized
Window.Arrange
TextBox.Arrange
Window.Arrange
Window.Loaded
Run Code Online (Sandbox Code Playgroud)
但是,如果我将Text属性更改为这样绑定:
<local:MultiBoundTextBox x:Name="tb">
<Binding Path="Day" Mode="OneWay" />
</local:MultiBoundTextBox>
Run Code Online (Sandbox Code Playgroud)
我在输出中得到了这个:
Window.Initialized …Run Code Online (Sandbox Code Playgroud) 我有这段极其简化的代码,它在 Firefox 中产生的结果与您在 Chrome 或 Edge 中获得(和期望)的结果相反(尚未尝试过其他浏览器):
[1, 2, 3, 4, 5].sort((a, b) => 1).forEach(a => document.write(a));Run Code Online (Sandbox Code Playgroud)
由于某种原因,它在 Firefox 中颠倒了数组。这是一个错误还是我错过了什么?
我有一个PathGeometry定义一个像这样的路径:
原始路径http://devblog.ailon.org/devblog/_stuff/wpfpathgeoquestion/original.gif
这是一个简化的例子.实际上它可以有任何类型的段(线,弧,贝塞尔).
现在我需要在段关节点中切出某种类型的孔(正方形,圆形等),以便最终结果如下所示:
带孔http://devblog.ailon.org/devblog/_stuff/wpfpathgeoquestion/with_holes.gif
我最初的想法是使用GeometryCombineMode.Exclude将原始PathGeometry与其他包含正方形(或其他)的几何图形组合在一起.不幸的是,如果未填充路径,则会生成空几何.如果填充它会产生不正确的结果.
所以我被卡住了.在带有线段的简单示例中,我可以预先计算边界点并使我的线段在那里结束,但是对于弧和贝塞尔曲线,这将有点过分.
有谁知道如何实现这一目标?
注意:我需要擦除这些孔(透明),因此在它上方放置一个白色方块不会.
我正在寻找有效确定控件是否实际可见和可点击的方法.我的意思是除了检查对象的Visibility属性.
我可以检查RenderSize,如果任何父元素被折叠,那将是[0,0].所以这也很简单.我还可以遍历可视化树,看看是否所有元素的不透明度都设置为1.
我不知道如何很好地检查这些情况:
更新(另一个场景)
有更好的想法吗?我错过了什么吗?
谢谢!
我有2个表格,简化形式如下:
Products(
id: int,
name: varchar
);
ProductSpecs(
product_id: int,
spec_name: varchar,
spec_value: int
);
Run Code Online (Sandbox Code Playgroud)
现在我需要通过某些规范项的值(例如"价格")对产品(在linq到sql中)进行排序.所以我做这样的事情
var products = from p in db.Products
from ps in p.ProductsSpecs
where ps.spec_name == "price"
orderby ps.spec_value
select p;
Run Code Online (Sandbox Code Playgroud)
问题是,如果没有具有spec_name"price"的ProductSpec,则根本不包含该产品.我可以使用Union或Concat添加这些产品,但这样就不会保留第一部分的排序.
处理这个问题的最佳方法是什么?
谢谢.
我在我的控件库中的几个类上设置ToolboxItem(false)属性,以防止将其添加到Toolbox.此属性与ASP.NET设计器完美配合,但使用WPF设计器似乎没有任何效果.
是否有其他方法可以使用WPF实现此功能,或者只是不受支持?
我需要写一个匹配字符串的正则表达式,如"abc","ab","ac","bc","a","b","c".订单很重要,不应该匹配同一部件的多个外观.
A-B?C?几乎可以解决问题.除了它也匹配空字符串.有没有办法阻止它匹配空字符串或者可能以不同的方式为任务编写正则表达式.
wpf ×7
layout ×3
.net ×2
linq ×2
linq-to-sql ×2
silverlight ×2
arrays ×1
binding ×1
geometry ×1
javascript ×1
mask ×1
opacity ×1
pathgeometry ×1
regex ×1
sorting ×1
sql ×1
textblock ×1
viewport ×1
visibility ×1
windows-8 ×1
wpf-controls ×1