WPF: Kontejner pro editaci objektů

Předem se omlouvám za nadpis. Nenapadá mě totiž, jak lépe pojmenovat věc, kterou určitě všichni znáte z (převážně vektorových) grafických editorů, a kterou můžete vidět na následujícím obrázku v akci:

dragdrop

Jedná se o kontrolní prvek zděděný z ContentControl (tedy takový, který umožňuje mít do sebe zanořený nějaký obsah) a umožňuje přesuny, změnu velikosti a rotaci jiného prvku, který je uvnitř.

Vycházel jsem z článku WPF Diagram Designer: Part 1, ale chtěl jsem, aby můj kontrolní prvek měl následující vlastnosti:

  • Jednoduché použití (příklad v závěru článku)
  • Možnosti přesunů, změny velikosti a rotace
  • Kurzory nezávisle na nastavení Windows
  • Kurzory správně vzhledem k úhlu natočení
  • Možnost definovat Brush (barvu) úchopových okrajů
  • Možnost dalšího rozšiřování (tedy ne jenom styl ContentControl-u)

Příklad

<Window x:Class="ObjectMoveTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:con="clr-namespace:WPFUtils;assembly=WPFUtils"
Title="Window1" Height="600" Width="800">
  <Canvas>
    <con:ObjectTransformContainer Width="300" Height="200" SelectionBrush="Red" Canvas.Left="50" Canvas.Top="50">
      <MediaElement Stretch="Fill" x:Name="mediaElement" Source="./test/movie.wmv" IsHitTestVisible="False"/>
    </con:ObjectTransformContainer>
  </Canvas>
</Window>

Závěr

Pro lepší představu a použití ve vlastních projektech nabízím celý projekt ke stažení. Doufám, že se bude někomu hodit. :)

Zveřejněno 20 October 09 10:11 by topas
Vedeno pod: ,

Upozornění na nové komentáře

Pokud chčeš dostávat upozornění emailem na změny u toho příspěvku,tak se zaregistruj zde.zde

Odebírat komentáře k tomuto příspěvku pomocí RSS

Komentář

# .NET i jiné ... said on November 9, 2009 10:39 PM:

Tak toto se mi nashromáždilo v notebooku: CSS compatibility cheat sheet pre IE 6,7,8 – aspnet.sk Ako

# Nozomi said on February 27, 2012 12:30 AM:

I think you're saniyg some weird stuff here, Denis.WPF uses hardware rendering, much more extensively than SL, using D3D9.  In my experience writing a real non-trivial app with it, it runs fine on an Atom-based netbook with Intel graphics.  (I have two of them as test machines.)  I'm dissatisfied only with cold startup time, which is painful on slow CPU/disk machines.Of course, to get a smooth running WPF app, you need to understand performance, how WPF works, pick a target hardware spec, and know the limits.  But the same is true for anything including HTML/JS.  Hardware acceleration doesn't magically make everything fast and free.Also, the .NET Framework (CLR, BCL) is already compiled to the native instruction set.  Parts of the .NET Framework that are managed code get NGEN'd to native code at install time, or queued for immediate NGEN'ing in the background depending on which OS you're running.  And of course, .NET application and library code is also compiled to the native instruction set, always, whether you use NGEN or you let it happen at runtime via JIT.Finally, remember that SL apps on WP7 are already running on ARM.  All WP7 phones use ARM CPUs.  From what I hear about SL WP7 app dev (I don't own a WP7 phone), perf is a challenge but it's doable and getting better in updates to the OS.  If apps can be made to run smoothly on a phone with an ARM CPU, why not on a tablet with an ARM CPU?

# ljdueangy said on February 27, 2012 12:26 PM:

bLhAD1  <a href="http://ilirbfdcplla.com/">ilirbfdcplla</a>

# pfcyvqpsnfb said on February 28, 2012 11:05 AM:

5B3Vbf , [url=http://jruuiqaznnnh.com/]jruuiqaznnnh[/url], [link=http://qjlzavxdzadl.com/]qjlzavxdzadl[/link], http://kqtndjqrcfdm.com/

# buhhougcewa said on March 1, 2012 4:14 PM:

9TKIis  <a href="http://ljugernuybiu.com/">ljugernuybiu</a>

# aonoijaqtqk said on March 14, 2012 3:14 AM:

a7MXuT , [url=http://pppdlheflcen.com/]pppdlheflcen[/url], [link=http://wnehlaxyukmp.com/]wnehlaxyukmp[/link], http://sqmdcykmcwak.com/

Vytvoření nového komentáře

(povinný) 
(nepovinný)
(povinný) 
Opiš čísla, která vidíš na obrázku: