仍在和WPF一起玩弄,并在我学习的同时学习.现在尝试构建一个动态的控件分组(主要是按钮,但可能包括CheckBoxes和其他).
我不知道最好的方法是什么,所以我尝试创建ItemsControl样式,然后将项目添加到WrapPanel内的ItemsPresenter中.很快意识到这些项目不会换行,因为它们实际上不在WrapPanel中,除非我把它作为ItemsHost.像这样:
<Style x:Key="ButtonPanelGroup" TargetType="{x:Type ItemsControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ItemsControl}">
<Border CornerRadius="5"
BorderBrush="{StaticResource DarkColorBrush}"
BorderThickness="1"
Margin="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<WrapPanel IsItemsHost="True" FlowDirection="LeftToRight">
<ItemsPresenter />
</WrapPanel>
<ContentPresenter ContentSource="Name" Grid.Row="1" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
请注意,这是一项正在进行的工作,我仍然需要实现许多样式效果.我在这里用它:
<UniformGrid Rows="1">
<ItemsControl Name="Group1" Style="{StaticResource ButtonPanelGroup}">
<Button>Button1</Button>
<Button>Button2</Button>
<CheckBox>TickBox</CheckBox>
</ItemsControl>
<ItemsControl Name="Group2" Style="{StaticResource ButtonPanelGroup}">
<Button>Button3</Button>
<Button>Button4</Button>
<Button>Button5</Button>
</ItemsControl>
<ItemsControl Name="Group3" Style="{StaticResource ButtonPanelGroup}">
<Button>Button6</Button>
<Button>Button7</Button>
<Button>Button8</Button>
</ItemsControl>
</UniformGrid>
Run Code Online (Sandbox Code Playgroud)
另请注意,它仍然是一项正在进行中的工作,因为UniformGrid不会成为这里的方式,并且边距可能是一种痛苦(是否有任何重叠的边距?)所以输入会受到赞赏.
现在到了真正的问题.这不起作用我收到错误:
'ItemsPresenter'对象无法添加到'WrapPanel'.无法显式修改用作ItemsControl的ItemsPanel的Panel的Children集合.ItemsControl为Panel生成子元素.对象'System.Windows.Controls.ItemsPresenter'出错.
那么做这样的事情的最佳方法是什么(希望能够将按钮和其他控件扔进ItemControl并且排队真的很棒).将控件放入某种集合并迭代会更好吗?
我希望能很好地完成它,但我的WPF技能仍然缺乏.是否有任何WPF书籍超出了基础知识,并展示专业人士将如何真正做到这一点?
我有一个带有ToggleButton(ExpanderButton)的TreeView.togglebutton有两个图像(一个用于展开,一个用于展开).然而,当我选择一个TreeViewItem时,我用不同的颜色高亮一点,我也想改变图像的颜色(我在另一种颜色中有相同的颜色).
问题是我不知道如何在ToggleButton上将触发器属性设置为TreeViewItem上的IsSelected属性.
有任何想法吗?
我需要一些东西作为占位符.我起初将内容控制视为一种解决方案,但我遇到了一些问题.
然后我考虑将.docx中的CustomXML添加到其中,但由于i4i的诉讼而拒绝了.
然后我决定通过OpenXML SDK 2.0简单地改变内容控制的文本,但即使它如此标记,内容控制也不会消失.我想它不知道文本发生了变化,除非它发生在单词内部.
我或许可以删除CC并放置文本,但我担心它可能带来的格式和样式问题,而且它会违反内容控制的目的.
然后我开始想知道我是否可以定义Word可以识别的自己的占位符.也许通过积木.它不需要做任何事情,除了易于使用OpenXML找到并以某种方式可标记,所以我知道用什么来替换它.我不确定可以用Building Blocks做什么,但我希望它能够做到.
不确定哪种解决方案最适合我,但我需要的是:
a)一些容易放在模板中的东西,也许是预定义的内容控件占位符,你可以放置在你想要的地方并按照你喜欢的样式.
b)添加数据后,删除所有占位符,不再修改.它保持在占位符中定义的样式/格式.
要收回,我需要回答
如何在OpenXML SDK中编辑内容控件,以便在添加文本后删除它们.
-要么-
我可以为Word文档定义自己的自定义OpenXML标记,然后我可以替换它吗?
我正在尝试使用Microsoft Team Foundation Service(Cloud TFS)并使用自动托管构建和程序包还原.
它总是失败,但根据日志似乎包恢复工作正常,但是当找到我们通过包恢复得到的二进制文件时,这是一个问题,就像它没有查看正确的文件夹.
日志:
Build started 4/9/2013 10:24:37 AM.
Project "C:\a\src\ValuePlan.Client.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
Building solution configuration "Release|x86".
Project "C:\a\src\ValuePlan.Client.sln" (1) is building "C:\a\src\VP\VP.csproj" (2) on node 1 (default targets).
RestorePackages:
"C:\a\src\.nuget\nuget.exe" install "C:\a\src\VP\packages.config" -source "" -o "C:\a\src\packages"
Successfully installed 'Autofac 2.6.3.862'.
Successfully installed 'Caliburn.Micro 1.3.1'.
PrepareForBuild:
Creating directory "obj\x86\Release\".
Project "C:\a\src\VP\VP.csproj" (2) is building "C:\a\src\VpUserControls\VpUserControls.csproj" (3) on node 1 (default targets).
RestorePackages:
"C:\a\src\.nuget\nuget.exe" install "C:\a\src\VpUserControls\packages.config" -source "" -o "C:\a\src\packages"
All packages listed in …Run Code Online (Sandbox Code Playgroud) 好吧我很确定这是一件令人眼花缭乱的事情,但我找不到它.
我正在尝试根据它的元数据从MEF容器中导出一个对象.
我在这样的教程中看到过这个:
但是,我的导出没有为此工作所必需的元数据属性.那可能是什么问题?
[Export(typeof(IController))]
[ExportMetadata("controllerName","Home")]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class HomeController : Controller{}
Run Code Online (Sandbox Code Playgroud)
然后再次
public class MyControllerFactory : IControllerFactory
{
private readonly CompositionContainer _container;
public MyControllerFactory(CompositionContainer container)
{
_container = container;
}
public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
var controllerExport = _container.GetExports<IController>().
Where(exp => exp.Metadata) //Here it doesn't have the Metadata property.
}
}
Run Code Online (Sandbox Code Playgroud)
我知道GetExports返回一个Lazy集合,当然没有Metadata属性,但我在大多数教程中都假设了这一点.
我该怎么做呢?
这就是我做的:
public interface IControllerMetaData
{
string Name { get; }
string Subdomain { get; }
}
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple=false)]
public class ControllerMetadataAttribute …Run Code Online (Sandbox Code Playgroud) 使用Visual Studios 2010我正在创建一个具有数据库的项目.
我决定尝试使用其中一个数据库项目,它允许您在源代码管理中管理数据库以及代码.
我还认为我将使用实体框架作为我的数据访问工具.
有没有什么好的解决方案可以将EF 4.0项目与数据库项目中管理的数据库联系起来(假设它是一个新的数据库)?
我经常使用TextBox绑定到Integers而没有太多问题.
但是,如果我尝试将TextBox绑定到Double,则它不起作用.
当我输入5,85(我的文化为decimalSeperator)时,我将585.0传递给double值.
它是如何转换的,我可以使用什么解决方案来解决这个问题?ValueConverter会是最好的解决方案吗?
我目前正在寻找我的WPF应用程序的验证,并看到提到IDataErrorInfo.但是,很少有如何使用它的指南,更糟糕的是没有人解释它是如何工作的.
在MSND.com网站,这是得到安宁 MSDN
public class Person : IDataErrorInfo
{
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
public string Error
{
get
{
return null;
}
}
public string this[string name]
{
get
{
string result = null;
if (name == "Age")
{
if (this.age < 0 || this.age > 150)
{
result = "Age must not be less than 0 or greater than 150.";
}
} …Run Code Online (Sandbox Code Playgroud) 所以我有一个运行Debian的Raspberry Pi和WebIOPi系统.该守护进程时,我就开始使用标准的启动'$ sudo的/etc/init.d/webiopi start'命令,但自动启动不起作用'$ sudo的更新的rc.d webiopi defaults'运行就好了.
日志表明它是Python中的编码问题,我的猜测python使用的是ascii,但脚本文件使用的是utf8.
为什么它能正常工作但不能自动启动,解决这个问题的好方法是什么?
我正在尝试创建一个应用选项卡,其中每个选项卡都有一个按钮区域和一个视图区域.
现在每个选项卡在布局中基本上具有相同的布局,我希望能够重用相同的布局,这样我就不必在很多地方进行更改(这只是不好的编程).我可以使用资源或样式完成此操作.
如果可能,请提供灯光代码示例.
编辑:我已经决定添加一个我正在尝试做的例子,因为我还没有得到它.
在每个TabItem下我试图重新创建这个网格(它有点复杂,但你明白了):
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="200"/>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Margin="10"
BorderBrush="{StaticResource MediumColorBrush}"
CornerRadius="10"
BorderThickness="2"
Grid.Row="0">
<!-- First content goes here -->
</Border>
<Border Margin="10"
BorderBrush="{StaticResource MediumColorBrush}"
CornerRadius="10"
BorderThickness="2"
Grid.Row="1">
<!-- Second content goes here -->
</Border>
</Grid>
Run Code Online (Sandbox Code Playgroud)
你也可以看到2个边框是一样的.现在我需要将一些内容占位符放在我的评论所在的位置.我不想在资源字典中声明这个Grid布局,然后在我使用它的地方将单独的内容放入每个边框.
我可能有很多TabItems,所以重复这段代码不是一个好主意,每个Tab页面将在2个占位符中有不同的内容.
我可以用了
<ContentPresenter Content="{Binding}" />
Run Code Online (Sandbox Code Playgroud)
只有1个内容的东西,当会有更多内容时会发生什么.
wpf ×4
c# ×2
styles ×2
xaml ×2
azure-devops ×1
binding ×1
data-binding ×1
debian ×1
encoding ×1
export ×1
itemscontrol ×1
itemspanel ×1
layout ×1
mef ×1
metadata ×1
ms-word ×1
nuget ×1
openxml ×1
openxml-sdk ×1
python-2.7 ×1
raspberry-pi ×1
tfs ×1
tfsbuild ×1
togglebutton ×1
treeview ×1
triggers ×1
webiopi ×1