我正在寻找一些有效隐藏继承成员的方法.我有一个继承自公共基类的类库.一些较新的后代类继承了依赖属性,这些属性已成为残留,在使用IntelliSense或在可视化设计器中使用类时可能会有点混乱.
这些类是为WPF或Silverlight 2.0编写的所有控件.我知道ICustomTypeDescriptor和ICustomPropertyProvider,但我很确定那些不能在Silverlight中使用.
它不是可用性问题的功能问题.我该怎么办?
更新
我真正想隐藏的一些属性来自不属于我自己的祖先,而且由于我正在设计的特定工具,我不能将成员隐藏在new操作员身上.(我知道,这太荒谬了)
考虑Win Phone 7中的XAML TextBox.
<TextBox x:Name="UserNumber" />
Run Code Online (Sandbox Code Playgroud)
这里的目标是当用户按下Enter屏幕键盘上的按钮时,这将启动一些逻辑以刷新屏幕上的内容.
我想专门为此举办一个活动Enter.这可能吗?
Enter每个按键?即一些模拟ASCII 13?
在我的Silverlight项目中,我想创建一个包含.xaml的程序集,该程序集无法从程序集外部看到.但是,我没有明确的方法可以做到这一点.当我修改.xaml.cs文件中的访问修饰符时,编译器告诉我:
Partial declarations of "My xaml class here" have conflicting accessibility modifiers
Run Code Online (Sandbox Code Playgroud)
在xaml文件本身中,似乎没有地方放置我的访问修饰符.简而言之,如何设置与我的xaml文件关联的类internal.
我有一个带有两个元素的垂直StackPanel:一个Button和一个ListBox.如何将ListBox拉伸到剩余的页面高度?
<StackPanel Height="Auto" Width="Auto">
<Button Height="30" Width="100" Content="Get Content" x:Name="GetContent"/>
<ListBox Height="Auto" Width="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
请注意,我使用Grid容器使其工作:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Width="100" Height="30" Content="Get Content" Click="OnGetContent" Grid.Row="0" Grid.Column="0"/>
<data:DataGrid x:Name="MyContent" Margin="0,5" Grid.Row="1" Grid.Column="0"/>
</Grid>
Run Code Online (Sandbox Code Playgroud) 我想要一个定义no的Button CornerRadius和另外两个定义的Button,我该如何实现呢?
<Style TargetType="Button" x:Key="TabButton">
<Setter Property="Background" Value="White" />
<Setter Property="TextBlock.TextAlignment" Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="0" Background="White" BorderBrush="#ccc" BorderThickness="0,1,1,0" >
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="Button" x:Key="TabButtonFirst" BasedOn="{StaticResource TabButton}">
<Setter Property="CornerRadius" Value="3,0,0,0" />
</Style>
<Style TargetType="Button" x:Key="TabButtonLast" BasedOn="{StaticResource TabButton}">
<Setter Property="CornerRadius" Value="0,0,0,3" />
</Style>
Run Code Online (Sandbox Code Playgroud) 因此,web和StackOverflow对于如何将组合框绑定到WPF中的枚举属性有很多很好的答案.但是Silverlight缺少使这成为可能的所有功能:(例如:
EnumDisplayer样式IValueConverter,因为Silverlight不支持x:Type.ObjectDataProvider像在此方法中那样使用,因为它在Silverlight中不存在.Type对象的属性来执行#1版本,因为XAML中不支持泛型(并且使它们工作的黑客都依赖于标记扩展,Silverlight不支持).大规模的失败!
在我看来,做这项工作的唯一方法是
IValueConverter为我想绑定的每个枚举制作一个自定义.是否有更通用的替代方案,即不要为我想要的每个枚举反复编写相同的代码?我想我可以使用接受枚举作为类型参数的泛型类来做解决方案#2,然后为我想要的每个枚举创建新类
class MyEnumConverter : GenericEnumConverter<MyEnum> {}
Run Code Online (Sandbox Code Playgroud)
伙计们,你有什么想法?
我们正在开始一个新项目,我正在尝试决定我们应该采用哪种Wpf-esque开发/部署策略.在我们的案例中,我们正在寻找一个非常复杂的商业应用程序,将被100多人(而不是1000人)使用,所以我倾向于点击一次应用程序.我的老板喜欢Silverlight应用程序的想法,因为这意味着更容易部署.那么我们应该跳哪个方向?
答案当然是"它取决于".那么每种方法的优缺点是什么?
我将开始滚球(编辑添加来自artur carvalho的一些答案):
Silverlight的
跨浏览器
不需要完整的框架.
更好地控制用户.如果您的用户登录,您不必担心激活密钥或类似的东西.
它适用于Windows和Mac.
您可以轻松更新所有用户应用.
无法与客户端的文件系统进行交互等
与完整的Wpf相比具有更少的功能(任何人都有一个很好的资源,文件差异?)
单一窗口
单一版本
Wpf Web App(xbap)
全Wpf.
单个浏览器
需要完整的框架
无法与客户端的文件系统进行交互等
单一窗口
单个版本
Wpf单击一次
完整的Wpf
可以脱机工作
多个窗口
多个版本(con?)
更好地访问计算机的低级部件
没有停机维护
单个浏览器
需要完整的框架
稍微(?)更难安装.
我对熟悉的WPF客户端应用程序的大量细节非常熟悉.我知道WPF客户端应用程序支持完整的.NET Framework 3.5,允许硬件加速2D和3D图形,主题,模板,样式,触发器,工作.
我不清楚的是XBAP和Silverlight应用程序中存在或缺少哪些功能和/或细节.我听说由于安全问题,XBAP在某些方面本质上受到限制,但就是这样.
我知道WPF足够强大,可以用于全面的业务应用程序,但是XBAP和Silverlight呢?每个的重要能力和局限是什么?它们中的任何一个都缺少在业务应用程序中使用时会使它们无用的功能吗?
我的MSBuild命令行如下:
msbuild e:\code\myProject.csproj /p:Configuration=Debug /p:OutputPath=bin/Debug /p:Platform=x86 /p:PlatformTarget=x86
该项目在VS2010中的开发机器上构建良好,但不是上面的命令.我正在运行Win 7 64位.我收到一条错误消息,说我没有安装Silverlight 4 SDK,但我确实如此.我已经阅读了一些帖子,你必须设置Platform = x86但无济于事.以下是完整的错误消息:
Microsoft (R) Build Engine Version 4.0.30319.1 [Microsoft .NET Framework, Version 4.0.30319.1] Copyright (C) Microsoft Corporation 2007. All rights reserved. Build started 6/8/2010 4:03:38 PM. Project "E:\code\dashboards\MyProject2010\MyProject2010.Web\MyProject2010 .web.csproj" on node 1 (default targets). GenerateTargetFrameworkMonikerAttribute: Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output fi les are up-to-date with respect to the input files. CoreCompile: Skipping target "CoreCompile" because all output files are up-to-date with resp ect to the input files. …
依赖项属性的创建方式与属性相同.
是否仅在创建自定义控件时使用依赖项属性?
silverlight ×10
wpf ×6
c# ×4
xaml ×4
.net ×3
data-binding ×1
enums ×1
msbuild ×1
polymorphism ×1
stackpanel ×1
xbap ×1