|
3.0 is the standard framework currently used with Windows Vista and is considered an optional download for WinXP users with SP2. Although it would be nice for .NET 3.5+ to be included in Windows Update I do not forsee it happening.
Regards,
Thomas Stockwell
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Visit my homepage Oracle Studios
Discounted or Free Software for Students:
DreamSpark - downloads.channel8.msdn.com
MSDN Academic Alliance - www.msdnaa.com
|
|
|
|
|
I'm looking for the best way to render a map in WPF.
The map is 29952x11520 pixels, hence it is too large to simply store into memory. It is divided into blocks of 32x32 pixels, and these blocks are compressed, but can be decompressed to draw the blocks when necessary.
The map should be scrollable.
What is the best way to allow the map to scroll quickly, without taking up over a gigabyte of memory?
|
|
|
|
|
Silverlight has the MultiScaleImage aka DeepZoom which would do all the hard work for you, this is not available in WPF and I'm not sure if/when it will be added. If you want to do it in WPF you'll have to do it yourself, maybe the projects below could help although they use different technologies. Depending on whether you need to support zooming you may need to have different sets of tiles depending on the zoom level, even though the image would be cut into many pieces to zoom out all the way you would still need every tile. You might want to research image formats that support progressive loading, It would seem using Silverlight would be your best bet.
http://iipimage.sourceforge.net/
http://www.codeplex.com/silverzoom/Release/ProjectReleases.aspx?ReleaseId=8783
|
|
|
|
|
The normal way of doing this is to load the tiles around the area you are viewing and, when you scroll, load in the tiles you need in that particular direction.
|
|
|
|
|
Hi all,
sorry but I'm just a beginner in WPF and I have a dumb question:
How can I get the proper UI Element from a given point inside the Canvas element?
As far as I know the only way to achieve this is to use the mouse, but I don't want to use it.
Does anyone know?
Thanks in advance
|
|
|
|
|
|
Thanks a lot, that's what I was looking for.
|
|
|
|
|
Hi,
does anybody knows what is the WPF way to avoid Tab Selection?
in WinForms i had the Selecting event which i could cancel (with CancelEventArgs)
i need to cancel (or not) based on the tab which i"m exiting (the previous tab). i get all that information in SelectionChanged but that's too late to cancel.
i can't use MouseClick because i don't have all the information i need.
all i've managed is the following (ugly) code in SelectionChanged:
if (!m_InSelectionChanged && e.Source == e.OriginalSource)
{
m_InSelectionChanged = true;
if (e.RemovedItems.Count > 0)
{
TabItem unselecetd = e.RemovedItems[0] as TabItem;
TabItem selected = e.AddedItems[0] as TabItem;
if (selected != null && unselecetd != null)
{
CancelEventArgs args = new CancelEventArgs();
Check(args);
if (!args.Cancel)
{
}
else
{
m_TabControl.SelectedItem = unselecetd;
}
}
}
m_InSelectionChanged = false;
}
any other ideas? no way that it can't be done in wpf with some technique
yanai
|
|
|
|
|
Good People,
How do I bind a CLR collection object instance to a ListBox (using Expression Blend)? I see the class definition (i.e. Employees) as a binding option, but I don't see the specific instance (i.e. Employees partTimeEmployees). I have created the instance (partTimeEmployees) in the main window as a public member, however I still don't see it as a binding option. I still only see the type (i.e. Employees). By the way, the Employees class inherits from the ObservableCollection<t> class.
Thanks for any information you can provide.
Peace,
BP
|
|
|
|
|
The XAML is compiled before the code-behind, so you cannot use the instance you have declared in the way you are trying. You have a few options:
- Give your ListBox a name and in the forms loaded event (not constructor) listbox1.ItemSource = partTimeEmployees
- Use blend and add a datasource of type Employees, this will create a ObjectDataProvider and intialize its own Employees. Unless you fill the collection in the Employee constructor it'd likely be empty, that leads to the third option...
- Create a 'DataSource' object that has properties for PartTimeEmployees, Customers, e.t.c. Make this a singleton that returns an instance with all the data populated. Then use this like the previous option you'll probably have to edit the XAML as seen in the links below, you can then drag the PartTimeEmployees property onto the ListBox and a binding dialog will popup. This method works at design-time which is helpful but it can slow down blend so you might want to check if it is design-time and only return a few employees. See here and here for more info about ObjectDataProvider.
|
|
|
|
|
Thanks, I appreciate your response. I'm off to give it a shot. Actually, the object's default constructor loads the information (i.e. adds employee objects). So maybe there is something additional that I need to do to make it work properly.
Again, thanks.
|
|
|
|
|
By the way, how do I get access to the forms loaded event for the (startup) window in question so I can set the listbox ItemSource property?
modified on Wednesday, May 21, 2008 8:43 PM
|
|
|
|
|
Seeing as the constructor does load the employees you could just add that as a datasource in blend. I just tested doing it in the constructor and it worked, it can cause problems with templates and bindings in some situations, you just attach an event handler to the Loaded event if you want to use that instead. I just came across these and haven't checked them out yet but there is a Using an ObjectDataSource in Expression Blend tutorial among others.
|
|
|
|
|
Thanks, you have been very helpful. I figured out the binding.
Now, it just shows the first custom listboxitem. Any idea on how I can get it to show a custom listboxitem for all of the Employees? (Just so you know, my custom listboxitem contains a border, label, and image. The label and image is properly bound.) I am wondering if I have to do something with ItemsPresenter, ItemsPanel, or IsItemsHost. What do you think?
Thanks again.
|
|
|
|
|
Is your custom ListBoxItem a subclass of listbox item or a normal ListBoxItem + DataTemplate (Recommended)? To create a DataTemplate right-click the listbox and choose Edit Other Templates > Edit Generated Items (ItemTemplate). You can also do this via the binding dialog that pops up.
I ended up with something like this:
<Window x:Class="EmployeeTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="296" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:EmployeeTest="clr-namespace:EmployeeTest">
<Window.Resources>
<ObjectDataProvider x:Key="EmployeesDS" d:IsDataSource="True" ObjectType="{x:Type EmployeeTest:Employees}"/>
<DataTemplate x:Key="EmployeesTemplate">
<Border BorderThickness="1,1,1,1" BorderBrush="#FF000000" Width="100" Margin="0,0,0,4">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Path=Image}" Stretch="None" Margin="4,4,4,4"/>
<TextBlock Text="{Binding Path=Name}" VerticalAlignment="Center" Margin="0,0,4,0"/>
</StackPanel>
</Border>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox IsSynchronizedWithCurrentItem="True" Margin="40,40,40,40" ItemsSource="{Binding Mode=OneWay, Source={StaticResource EmployeesDS}}" ItemTemplate="{DynamicResource EmployeesTemplate}"/>
</Grid>
</Window>
If you have subclassed ListBoxItem which you probably don't need to do you may have to subclass the ListBox and override GetContainerForItemOverride. The other properties you mentioned are for altering the layout of the items e.g a horizontal listbox, the ItemTemplate is the one you need to set.
|
|
|
|
|
Thanks man, you are a life saver. A big part of the problem was that I misunderstood what a Data Template is in WPF. Wow!
Now I'm going to try and figure the rest out. Thanks again.
|
|
|
|
|
Wow! I got it to work. Apparently, I had to just go into the code and just type in the Binding path for the textblock's text elements. You must be using Expression Blend 2, because on Expression Blend 1, the version I am using, there seems to be no way to bind it via the menus and dialogue boxes.
At any rate, I am blown away with what WPF can do. Now that I have a better understanding, the power of this tool is amazing. It is light years beyond the Windows Forms platform. This thing can do so much. Expression Blend is also amazing.
Thanks again man, I appreciate your help.
Peace,
BP
|
|
|
|
|
Hi All,
I'm just running through our main WPF application ResourceDictionary and sense checking it all and prepping it for some heavy themeing work.
Does anyone know of a resource on the web or a method for finding out what the internal color settings are for something like:
SystemColors.ControlBrushKey
SystemColors.ControlTextBrushKey
from one of the windows themes such as /themes/luna.normalcolor.xaml???
I'm finding some absolutely genius entries in our dictionary like:
<SolidColorBrush x:Key="BlackBrush" Color="White"/>
That is GENIUS at work that is! :P
Jammer
Going where everyone here has gone before!
My Blog
|
|
|
|
|
I know this is going to sound very dumb but, "Did you iterate through the dictionary and get the color?"
modified 27-Feb-21 21:01pm.
|
|
|
|
|
Sure ... there is no definition in the dictionary with that key!!
Jammer
Going where everyone here has gone before!
My Blog
|
|
|
|
|
Run this, you'll get all your colors and brushes.
<br />
Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded<br />
<br />
Dim pi As PropertyInfo() = GetType(SystemColors).GetProperties<br />
<br />
For Each obj As PropertyInfo In pi<br />
If obj.PropertyType Is GetType(System.Windows.ResourceKey) Then<br />
Dim objBrush As Object = Me.FindResource((obj.GetValue(Nothing, Nothing)))<br />
If TypeOf objBrush Is SolidColorBrush Then<br />
Debug.WriteLine("Brush: " & CType(objBrush, SolidColorBrush).Color.ToString)<br />
ElseIf TypeOf objBrush Is System.Windows.Media.Color Then<br />
Debug.WriteLine("Color: " & CType(objBrush, System.Windows.Media.Color).ToString)<br />
Else<br />
Debug.WriteLine("should not get here")<br />
End If<br />
End If<br />
<br />
Next<br />
End Sub
modified 27-Feb-21 21:01pm.
|
|
|
|
|
NICE! Thanks Karl, I'll try that in the morning! Much appreciated.
Jammer
Going where everyone here has gone before!
My Blog
|
|
|
|
|
Hmm ... converting things to C# isn't as easy as I thought!! For those wanting a C# version ...
PropertyInfo[] pi = typeof(SystemColors).GetProperties();
foreach (PropertyInfo obj in pi)
{
if (object.ReferenceEquals(obj.PropertyType, typeof(System.Windows.ResourceKey)))
{
object objBrush = this.FindResource((obj.GetValue(null, null)));
if (objBrush is SolidColorBrush)
{
Debug.WriteLine("Brush: " + ((SolidColorBrush)objBrush).Color.ToString());
}
else if (objBrush is System.Windows.Media.Color)
{
Debug.WriteLine("Color: " + ((System.Windows.Media.Color)objBrush).ToString());
}
else
{
Debug.WriteLine("should not get here");
}
}
}
Jammer
Going where everyone here has gone before!
My Blog
modified on Tuesday, May 27, 2008 7:01 AM
|
|
|
|
|
Hi Again Karl,
I'm trying to extend this functionality at the moment, I'm having some trouble with UIElementCollection. Have you ever used this?
UIElementCollection elements = new UIElementCollection(tabStandardControls, this);
foreach (UIElement element in elements)
{
}
tabStandardControls is a tab control in a UI that I want to query for color settings as per your code however my UIElementCollection always has a count of 0 ... can't actually find much info out there about using UIElementCollection either.
I've also tried:
VisualCollection vc = new VisualCollection(this);
and:
VisualCollection vc = new VisualCollection(tabStandardControls);
in my Window code behind but they're always empty as well ...
Any info would be great.
Jammer
Going where everyone here has gone before!
My Blog
|
|
|
|
|
Look into the VisualTreeHelper class. Makes it very easy to travel up and down the tree of elements.
modified 27-Feb-21 21:01pm.
|
|
|
|