在WPF中透明地将依赖项(使用IOC容器)注入用户控件的最佳方法是什么?
我假设用户控件是窗口或其他用户控件的XAML的一部分.我认为父母(无论是谁)不应对此负责.从父级手动注入依赖项的解决方案看起来不够干净.我希望避免明确管理组件的依赖关系,因为它消除了IOC的想法.
是否在创建逻辑树时引发任何事件,以便我可以拦截它并注入我的依赖项?
编辑:依赖我也意味着ViewModel,Controller,Presenter(使用的模式)
谢谢,安德烈
这必须是所有问题中最简单的问题,但我似乎无法弄明白.我有进度条,如何让它显示进度.我该如何开始呢?
<ProgressBar x:Name="ProgressUpload" Margin="5" IsIndeterminate="True" ></ProgressBar>
Run Code Online (Sandbox Code Playgroud) 当我使用键盘输入文字时,我看到编辑器窗口中的字符结尾,有点在键盘后面,它给我的工作带来了不便,如何使按键同时出现这些字符.
我正在为WPF中的项目设置样式ListBox,并希望在每个项目周围添加边框.与BorderThickness设置为1,例如,相邻的项之间的上下边框都引出,并因此出现比侧边界"厚",如下所示:

生成这些的项模板ListBoxItems是:
<DataTemplate>
<Border BorderThickness="1" BorderBrush="DarkSlateGray" Background="DimGray" Padding="8 4 8 4">
<TextBlock Text="{Binding Name}" FontSize="16"/>
</Border>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
我想"折叠"这些相邻的边界,例如,可以通过CSS.我知道BorderThickness可以单独为左/右/上/下边框定义,但这也会影响第一个或最后一个项目的边框,这是不希望的.
有没有办法用WPF实现这一目标?Border我缺少的属性,还是需要不同的方法来创建边界?
如何设置TabItem的背景?我尝试了以下代码:
<TabControl>
<TabItem Header="Test" Background="Blue" Foreground="Red" />
</TabControl>
Run Code Online (Sandbox Code Playgroud)
Foreground工作,但Background不起作用.

有任何想法吗?谢谢
我尝试了以下方法:
<tk:DataGridTextColumn
Header="Item"
Binding="{Binding Item.Title}"
ToolTipService.ToolTip="{Binding Item.Description}" />
Run Code Online (Sandbox Code Playgroud)
我没有看到任何工具提示.
有任何想法吗?甚至实施了吗?
我已将验证连接到绑定到TextBox容器的模型.当窗口第一次打开时,验证错误出现,因为模型为空,我不希望看到验证错误,直到提交窗口或文本TextBox已更改或丢失焦点.
这是TextBox:
<TextBox Text="{Binding
Path=Firstname,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}"
Width="124"
Height="24"/>
Run Code Online (Sandbox Code Playgroud)
怎么能实现这一目标?
如果我将Texta 绑定TextBox到float属性,则显示的文本不符合系统十进制(点或逗号).相反,它总是显示一个点('.').但是如果我在a中显示值MessageBox(使用ToString()),则使用正确的System Decimal.

XAML
<StackPanel>
<TextBox Name="floatTextBox"
Text="{Binding FloatValue}"
Width="75"
Height="23"
HorizontalAlignment="Left"/>
<Button Name="displayValueButton"
Content="Display value"
Width="75"
Height="23"
HorizontalAlignment="Left"
Click="displayValueButton_Click"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
代码背后
public MainWindow()
{
InitializeComponent();
FloatValue = 1.234f;
this.DataContext = this;
}
public float FloatValue
{
get;
set;
}
private void displayValueButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(FloatValue.ToString());
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经用一个转换器解决了这个问题,转换器用系统十进制取代了dot(这是有效的),但这是必要的原因是什么?这是设计,是否有更简单的方法来解决这个问题?
SystemDecimalConverter(以防其他人遇到同样的问题)
public class SystemDecimalConverter : IValueConverter
{
private char m_systemDecimal = '#';
public SystemDecimalConverter()
{
m_systemDecimal = GetSystemDecimal();
}
object IValueConverter.Convert(object value, Type …Run Code Online (Sandbox Code Playgroud) 每次循环迭代,我都想直观地更新文本块的文本.我的问题是WPF窗口或控件在循环完成之前不会直观刷新.
for (int i = 0; i < 50; i++)
{
System.Threading.Thread.Sleep(100);
myTextBlock.Text = i.ToString();
}
Run Code Online (Sandbox Code Playgroud)
在VB6中,我会打电话DoEvents()或control.Refresh.目前我只是喜欢类似的快速和肮脏的解决方案DoEvents(),但我也想了解替代方案或"正确"的方法来做到这一点.我可以添加一个简单的绑定语句吗?语法是什么?提前致谢.
嘿所有我想使用以下代码向我的网格添加标签:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
Dim dynamicLabel As New Label()
Dim g As New Grid
dynamicLabel.Name = "NewLabel"
dynamicLabel.Content = "TEST"
dynamicLabel.Width = 240
dynamicLabel.Height = 30
dynamicLabel.Margin = New Thickness(0, 21, 0, 0)
dynamicLabel.Foreground = New SolidColorBrush(Colors.White)
dynamicLabel.Background = New SolidColorBrush(Colors.Black)
Grid.SetRow(dynamicLabel, 0)
Grid.SetColumn(dynamicLabel, 6)
g.Children.Add(dynamicLabel)
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,按下按钮后,我从未在网格上看到任何东西......我缺少什么?
wpf ×10
wpf-controls ×10
textbox ×2
.net ×1
binding ×1
border ×1
c# ×1
culture ×1
datagrid ×1
tabitem ×1
validation ×1
vb.net ×1
wpftoolkit ×1