|
Am I reading this right?
You're proposing this code is in the View, right?
So you don't really need a ServiceLocator to get you an IFileDialog - you could just use an OpenFileDialog?
What am I missing?
___________________________________________
.\\axxx
(That's an 'M')
|
|
|
|
|
No - I'm proposing it in the VM not the View. This code allows you to test that your logic for loading a file works without having to, either make the file open code public (it should really be private here), or can only be tested from the UI. With the ServiceLocator, you would create a mock IFileDialog that returns you the hardcoded file reference knowing that the UI version will use the version of code you've written that wraps OpenFileDialog. Take a look at the work that Bill Kempf has done on Onyx[^] to see what I mean (and you can see the Silverlight version in there as well that I wrote for Bill).
|
|
|
|
|
Hello to everybody.
I have a grid, which is used to display data (there're about 16 columns and 100 rows) . This way of displaying data was used to make possible cell merging (RowSpan/ColumnSpan) and each cell presents TextBox.
But it's resource-intensive. I would like to use datagrid, but how to make cell merging? Or another control which won't be resource-intensive and will be able to merge.
By the way, I have to create it dynamically.
Best regards.
|
|
|
|
|
I'm styling a treeview so that when the mouse is over a treeviewitem it appears as a gradient bar. I'm trying to get the same effect as the VS2010 menu bars, except in a gold-ish gradient:
<UserControl.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:TreeNode}"
ItemsSource="{Binding Path=Nodes}">
<Border BorderBrush="#E5C365" BorderThickness="1" CornerRadius="5">
<StackPanel Orientation="Horizontal"
Margin="10,0,0,10">
<TextBlock Text="{Binding Path=Caption}" Height="25"></TextBlock>
</StackPanel>
</Border>
</HierarchicalDataTemplate>
<LinearGradientBrush x:Key="TreeItemMouseOverStyle" StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#FFFFFF" Offset="0.0" />
<GradientStop Color="#FFF3CF" Offset="0.25" />
<GradientStop Color="#FFECB5" Offset="0.75" />
<GradientStop Color="#FFECB5" Offset="1.0" />
</LinearGradientBrush>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource TreeItemMouseOverStyle}"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
The problem is, I don't want the border to be visible unless the mouse is over the item. How do I do this?
Everything makes sense in someone's mind
|
|
|
|
|
I would probably try setting a custom style for the Border component - create the new style, set the trigger in the custom style, and set the border's style to the new custom border style.
.45 ACP - because shooting twice is just silly ----- "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "The staggering layers of obscenity in your statement make it a work of art on so many levels." - J. Jystad, 2001
|
|
|
|
|
Ok, I understand but I'm not quite sure how to. Do you have an example?
Everything makes sense in someone's mind
|
|
|
|
|
Easy.
1) set the initial BorderBrush to Transparent
2) add a MouseOver trigger to the border where you set it to #E5C365
Something like this:
<Border BorderBrush="Silver" BorderThickness="1" Height="43" HorizontalAlignment="Left" Margin="34,202,0,0" Name="border1" VerticalAlignment="Top" Width="99">
<Border.Style>
<Style>
<Style.Triggers>
<Trigger Property="Border.IsMouseOver" Value="True">
<Setter Property="Border.Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
-- Modified Monday, November 15, 2010 3:20 PM
|
|
|
|
|
Well, I thought what you wrote was easy too. Except I coded it and I see no change:
<UserControl.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:TreeNode}"
ItemsSource="{Binding Path=Nodes}">
<Border BorderBrush="Transparent"
BorderThickness="1"
CornerRadius="2">
<Border.Style>
<Style>
<Style.Triggers>
<Trigger Property="Border.IsMouseOver" Value="True">
<Setter Property="Border.BorderBrush" Value="Red" />
<Setter Property="Border.BorderThickness" Value="3" />
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
<StackPanel Orientation="Horizontal"
Margin="5,2,5,2">
<TextBlock Name="txtProject"
Text="{Binding Path=Caption}"
FontSize="12"
Foreground="#024991">
<TextBlock.ToolTip>
<StackPanel>
<TextBlock FontWeight="Bold" Text="{Binding Path=Caption}"/>
<TextBlock Text="{Binding Path=FileName}"/>
</StackPanel>
</TextBlock.ToolTip>
</TextBlock>
</StackPanel>
</Border>
</HierarchicalDataTemplate>
<LinearGradientBrush x:Key="TreeItemMouseOverStyle" StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#FFFFFF" Offset="0.0" />
<GradientStop Color="#FFF3CF" Offset="0.25" />
<GradientStop Color="#FFECB5" Offset="0.75" />
<GradientStop Color="#FFECB5" Offset="1.0" />
</LinearGradientBrush>
<LinearGradientBrush x:Key="TreeItemSelectedStyle" StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#DBEAFC" Offset="0.0" />
<GradientStop Color="#D3E5FC" Offset="0.25" />
<GradientStop Color="#C7DFFC" Offset="0.75" />
<GradientStop Color="#C1DCFC" Offset="1.0" />
</LinearGradientBrush>
<Style x:Name="TreeViewItemStyle" TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource TreeItemMouseOverStyle}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource TreeItemSelectedStyle}"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
Everything makes sense in someone's mind
|
|
|
|
|
Is the gradient background showing up correctly? Because your style triggers could be breaking the border triggers (not sure on this, you didn't include your code, so its hard to try). If you remove the two triggers from the bottom of the XAML, does the border one work? Because I did try the border one in VS2010 before I posted it . I've seen different levels of triggers interfere with each other. If removing the two bottom triggers fixes the border trigger, then I'd suggest combining those triggers into the data template.
|
|
|
|
|
The mouseover gradient shows up. The selected item gradient does not. Commenting out the triggers didn't do anything. Here's the code again:
<UserControl.Resources>
<!--TreeViewItem Data Template-->
<HierarchicalDataTemplate DataType="{x:Type local:TreeNode}"
ItemsSource="{Binding Path=Nodes}">
<Border BorderBrush="Transparent"
BorderThickness="1"
CornerRadius="2">
<Border.Style>
<Style>
<Style.Triggers>
<Trigger Property="Border.IsMouseOver" Value="True">
<Setter Property="Border.BorderBrush" Value="Red" />
<Setter Property="Border.BorderThickness" Value="3" />
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
<StackPanel Orientation="Horizontal"
Margin="5,2,5,2">
<TextBlock Name="txtProject"
Text="{Binding Path=Caption}"
FontSize="12"
Foreground="#024991">
<TextBlock.ToolTip>
<StackPanel>
<TextBlock FontWeight="Bold" Text="{Binding Path=Caption}"/>
<TextBlock Text="{Binding Path=FileName}"/>
</StackPanel>
</TextBlock.ToolTip>
</TextBlock>
</StackPanel>
</Border>
</HierarchicalDataTemplate>
<!--Gradients-->
<LinearGradientBrush x:Key="TreeItemMouseOverStyle" StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#FFFFFF" Offset="0.0" />
<GradientStop Color="#FFF3CF" Offset="0.25" />
<GradientStop Color="#FFECB5" Offset="0.75" />
<GradientStop Color="#FFECB5" Offset="1.0" />
</LinearGradientBrush>
<LinearGradientBrush x:Key="TreeItemSelectedStyle" StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#DBEAFC" Offset="0.0" />
<GradientStop Color="#D3E5FC" Offset="0.25" />
<GradientStop Color="#C7DFFC" Offset="0.75" />
<GradientStop Color="#C1DCFC" Offset="1.0" />
</LinearGradientBrush>
<!--TreeViewItem Style-->
<Style x:Name="TreeViewItemStyle" TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource TreeItemMouseOverStyle}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource TreeItemSelectedStyle}"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
Everything makes sense in someone's mind
|
|
|
|
|
Oh... duh... sorry, I didn't read your question closely enough . Two things...
1) your TargetType actually needs to be "{x:Type TreeViewItem}"
2) doing the IsSelected thing will actually be a little tricky... if you examine the stock TreeViewItem template, you'll find a template trigger is doing it:
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
</Trigger>
So, unfortunately, that is "overriding" your trigger because the border "Bd" sits on top of the item. What you did works for IsMouseOver (on non selected items) because Bd is transparent in that case and the TreeViewItem background shows through.
You'd need to replace the entire template for TreeViewItem just to get to that sucker
|
|
|
|
|
One other thing... the TreeViewItem template is different for every OS, so you'd need 4 or 5 versions and a custom template selector... pain in the a$$, I know .
|
|
|
|
|
Hi guys
I have a question for you.
I created a c# class on server side, and i want that to be runned when my application starts.Can i do this??(i know that is possibile creating a WCF service)
But i would like to know if there are another way.
Thanks
Bye
|
|
|
|
|
You mean you have a Class and that has a Function and you want to Run the Function when your app starts ?
yes its possible , instatiate your class and create an object as we normally do and call the function. in here
public MainPage()
{
InitializeComponent();
}
Vuyiswa Maseko,
Spoted in Daniweb-- Sorry to rant. I hate websites. They are just wierd. They don't behave like normal code.
C#/VB.NET/ASP.NET/SQL7/2000/2005/2008
http://www.vuyiswamaseko.com
vuyiswa@its.co.za
http://www.itsabacus.co.za/itsabacus/
|
|
|
|
|
Silverlight is a client side technology.
However, you could use the Aspx page host to execute server side code.
The funniest thing about this particular signature is that by the time you realise it doesn't say anything it's too late to stop reading it.
My latest tip/trick
Visit the Hindi forum here.
|
|
|
|
|
Ok.That's right.
So if i create a class at server-side i can't instantiate that at client-side(for ex. in the MainPage's code behind), am i right??
Infact i tried to that but i couldn't.
You said to use the aspx page, i will try this option too.
Are there a tutorial or guide in this forum which explains the differences beetween server and cliend side.What can i do. and what i can't do.
Bye thanks
|
|
|
|
|
hello
Regarding Mouse Move handler - how to determine span of move (i.e. delta x and delta y)...? Thanks
<br />
private void SomeUserControl_MouseMove(object sender, MouseEventArgs e)<br />
{<br />
Point CurPos = Mouse.GetPosition(_parent);<br />
Point RelPos = _parent.PointToScreen(new Point(0, 0));<br />
<br />
if (IsMoving)<br />
{<br />
if (e.LeftButton == MouseButtonState.Pressed)<br />
{<br />
}<br />
}<br />
return;<br />
}<br />
dev
|
|
|
|
|
Usually you want to start measuring on some event or from some location, so what I do is trap the event that starts the measuring (usually MouseDown in my cases) and save the location. Then in the MouseMove event you can calculate the span by whatever distance metric you want.
CQ de W5ALT
Walt Fair, Jr., P. E.
Comport Computing
Specializing in Technical Engineering Software
|
|
|
|
|
hello
Anybody run across repaint issue with XenApp while minimizing WPF Popup - when popup (not the application) is minimized, it seems it still leaves behind "Ghosting" effect (patch of blue area) blocking application in the back (For example, Excel).
This is not a problem when:
(a) If user minimize the entire application instead of just the popup
(b) When XenApp runs under "Percent of Screen" as supposed to "Seamless" mode
(c) If the user "Close" the popup as supposed to just "Minimize" it (In the back, the popup's size was really/actually reduced in addition to setting it to transparent)
Thanks
dev
|
|
|
|
|
Hi,
Looking for a bit of help regarding a Datatrigger that I'm trying to implement in my mvvm application.
What I have is a grid and in the grids triggers I have a datatrigger that is bound to a boolean property
called ShowAnimation that when true, triggers a animation to go. Code doesnt run at all. I tried setting the
animation off using an eventtrigger and the animation runs but when I try a data trigger, then no luck. Heres the
xaml for the grid and datatrigger.
<Grid x:Name="ShowAppointmentGrid" Height="10" Width="175" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label Grid.Column="0" Grid.Row="0" Content="Date :"/>
<TextBox Grid.Column="1" Text="10 - Apr - 2010" />
<Label Grid.Column="0" Grid.Row="1" Content="Location :"/>
<TextBox Grid.Column="1" Grid.Row="1" Text="Liverpool Lils"/>
<Label Grid.Column="0" Grid.Row="2" Content="Time :"/>
<TextBox Grid.Column="1" Grid.Row="2" Text="4:00p.m."/>
<Label Grid.Column="0" Grid.Row="3" Content="Notes :"/>
<TextBox Grid.Column="1" Grid.Row="3" TextWrapping="Wrap" >
<Grid.Triggers>
<DataTrigger Binding="{Binding Path=ShowAnimation}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard >
<DoubleAnimation Storyboard.TargetName="ShowAppointmentGrid"
Storyboard.TargetProperty="Height"
To="135" Duration="0 :.5"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="ShowAppointmentGrid" Storyboard.TargetProperty="Height"
Duration="0 .3"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Grid.Triggers>
</Grid>
Thanks
|
|
|
|
|
Hi, I have following problem with accordion:
I add item to accordion at runtime with name like:
AccordionItem newItem = new AccordionItem();<br />
newItem.Name = "accordionItem_"+(myAccordion.Items.Count + 1).ToString();
then I remove it and once again I try to add it but I get an error "Value does not fall within the expected range" bacause supposedly an item with that name already exists. However, Items.Count is 0.
Can someone help?
|
|
|
|
|
Why not make the item visible/collapsed instead of trying to destroy/add it.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Because I need it to be removed, that is why. Hiding is not an option.
|
|
|
|
|
Simply make sure the item is removed. Can you please post the code here (for removing the item).
In general, the remove method works.
The funniest thing about this particular signature is that by the time you realise it doesn't say anything it's too late to stop reading it.
My latest tip/trick
Visit the Hindi forum here.
|
|
|
|
|
I simply use newAccordion.Items.Remove method. Maybe silverlight is still keeping somewhere the name of this item inside accordion? I made a test and there is no problem with creating i.e. a TextBlock with the same name.
|
|
|
|