以下是如何从加载项获取当前解决方案目录:
_applicationObject = (DTE2)application; // retrieved from OnConnection method
string solutionDir = System.IO.Path.GetDirectoryName(_applicationObject.Solution.FullName);
Run Code Online (Sandbox Code Playgroud)
你会如何通过VSPackage做到这一点?
我正在将Visual Studio插件迁移到VSPackage,因为我打算添加一些需要与IDE更深入集成的用户控件.
我发现了一些关于加载项与集成包的相对优点的一些很好的参考,例如:http: //nayyeri.net/visual-studio-addin-vs-integration-package-part-1
以及关于VSPackages上的msdn的一些很好的教程,例如:http: //msdn.microsoft.com/en-us/library/cc138589.aspx
我还没有找到关于加载项(例如DTE)中的更高级接口如何映射到VSPackage中的低级接口的良好引用(在msdn或其他方面).
有没有什么好的参考资料来帮助从附加接口到VSPackage接口的一般映射?
我想知道是否有任何方式来设置WPF布局网格的单元格,行和列的样式.我一直在努力寻找任何信息,而我发现的一些信息并没有提供相关信息.
我想将网格样式设置为链接屏幕截图中的样式.
如果实际控件不支持它,我可以以某种方式继承它然后执行吗?我对WPF很新,所以任何帮助都会非常感激.
另外一件事,我知道我可以为网格中的每个控件设置样式,但这看起来有点矫枉过正.我想有一个自己做的网格.
显而易见的解决方案是在ModelView元素上使用行号属性,但缺点是在添加记录或更改排序顺序时必须重新生成这些属性.
有优雅的解决方案吗?
我有一个显示销售订单的ListView,并按状态对它们进行分组.在WinForms中,我在每个组底部都有一个页脚,显示了每个组的总销售价格,我想在WPF中做同样的事情.
我已经想出如何对订单进行分组,但我无法弄清楚如何创建一个页脚.
这是我目前的团体风格:
<ListView.GroupStyle>
<GroupStyle HidesIfEmpty="True">
<GroupStyle.HeaderTemplate>
<DataTemplate>
<!--CollectionViewGroup.Name will be assigned the value of Status for that group.-->
<!--http://stackoverflow.com/questions/639809/how-do-i-group-items-in-a-wpf-listview-->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Path=Name}" HorizontalAlignment="Left" FontWeight="Bold" Foreground="Black"/>
<Line Grid.Column="1" Stroke="Black" X2="500" Fill="Black" VerticalAlignment="Center" />
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
Run Code Online (Sandbox Code Playgroud) 问题:
如果我DataGrid不完全可见(显示水平和垂直滚动条)并且我单击其中一个部分可见的单元格,则网格会自动滚动以将该单元格显示在视图中.我不希望这种情况发生.我试过玩RequestBringIntoView,像这样:
private void DataGrid_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)
但这没有任何作用.
我试过的事情:
UserControls; 我试图把一个事件处理程序RequestBringIntoView上的所有UserControls使我的细胞,并试图处理事件,想,也许我是不是只是处理做得不够RequestBringIntoView的DataGrid本身.这没用.DataGrid一个内部的ScrollViewer,而办理ScrollViewer的RequestBringIntoView事件.这实际上是有效的,并且停止了自动滚动行为,但在我的情况下托管一个DataGrid内部ScrollViewer是完全不可取的,所以我需要提出一个不同的解决方案.我不知道如何阻止这种行为,任何想法?
ObservableCollection为每个对它们执行的操作发出通知.首先,他们没有批量添加或删除调用,其次他们不是线程安全的.
这不会让他们变慢吗?我们有更快的选择吗?有人说ICollectionView缠得ObservableCollection很快?这种说法有多正确.
我有一个TextBox:
<TextBox x:Name="myTextBox"/>
Run Code Online (Sandbox Code Playgroud)
将TextBox在后面的代码有两个布尔:
myTextBox.Background.Opacity = 0;
myTextBox.BorderBrush.Opacity = 0;
Run Code Online (Sandbox Code Playgroud)
现在这一切都很好,但我如何在XAML中设置这两个属性?
顺便说一下,设定:
<TextBox x:Name="myTextBox" Background="#00FFFFFF"/>
Run Code Online (Sandbox Code Playgroud)
不影响Opacity财产.我想在XAML中专门设置opacity属性.
我已设法DataGrid显示添加新项目的新行.我现在面临的问题是我希望wpf的其余部分中的数据DataGrid只读,并且只能编辑新行.
目前这是我的DataGrid样子.
<DataGrid AutoGenerateColumns="False" Name="DataGridTest" CanUserAddRows="True" Grid.Row="2" ItemsSource="{Binding TestBinding}" >
<DataGrid.Columns>
<DataGridTextColumn Header="Line" IsReadOnly="True" Binding="{Binding Path=Test1}" Width="50"></DataGridTextColumn>
<DataGridTextColumn Header="Account" IsReadOnly="True" Binding="{Binding Path=Test2}" Width="130"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
但由于我只保留了列的只读,因此新行也会添加为只读,这是我不想要的.
我有一个WPF窗口,其中有一个控件主机框架.在那个框架中,我显示不同的页面.有没有办法只对一个页面进行对话模式?当我显示对话框时,不应该单击页面上的任何控件,但应该可以单击页面上不在同一窗口上的控件.
如果我有一个派生的组件ItemsControl,我可以访问它的子集合,以便我可以循环它们来执行某些操作吗?我现在似乎找不到任何简单的方法.
wpf ×9
c# ×4
datagrid ×2
styles ×2
xaml ×2
.net-3.5 ×1
grid ×1
itemscontrol ×1
listview ×1
modal-dialog ×1
mvvm ×1
scroll ×1
solution ×1
vspackage ×1
wpfdatagrid ×1